python 数据结构中的链表操作
链表的定义:
链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就能够访问整个结点序列。也就是说,结点包含两部分信息:一部分用于存储数据元素的值,称为信息域;另一部分用于存储下一个数据元素地址的指针,称为指针域。链表中的第一个结点的地址存储在一个单独的结点中,称为头结点或首结点。链表中的最后一个结点没有后继元素,其指针域为空。
python代码中实现链表的创建、展示链表数据、添加,追加元素、删除元素、统计链表中的元素个数的操作:
# 链表中的节点
class Node:
def __init__(self, data):
self.data = data
self.next = None
# 链表:节点管理类
class Link:
def __init__(self):
# 链表的表头
self.head = None
# 展示链表中的数据
def show(self):
temp = self.head
while temp:
print(temp.data)
temp = temp.next
# 在表头添加元素
def add(self, item):
# 创建节点
node = Node(item)
# 新节点的下一个元素指针指向表头
node.next = self.head
# 新的表头设置为当前节点
self.head = node
# 在末尾添加元素
def append(self, item):
# 创建节点
node = Node(item)
# 判断链表是否为空
if self.head:
# 找到最后一个元素
temp = self.head
while temp.next:
temp = temp.next
# 使用最后一个元素的next指向新节点
temp.next = node
else:
self.head = node
# 统计链表元素个数
def length(self):
count = 0
temp = self.head
while temp:
count += 1
temp = temp.next
return count
# 删除元素
def remove(self, item):
# 记录要删除元素的前面的元素
prev = None
temp = self.head
while temp:
if temp.data == item:
if temp is self.head:
self.head = temp.next
else:
prev.next = temp.next
break
else:
prev = temp
temp = temp.next
# 创建链表
link = Link()
# 添加元素
link.add(1)
link.add(2)
link.add(3)
# 追加元素
link.append(4)
link.append(5)
link.append(6)
# 删除元素
link.remove(3)
print(link.length())
print()
link.show()
python 数据结构中的链表操作的更多相关文章
- Python数据存储 — MySQL数据库操作
本地安装MySQL 调试环境python3.6,调试python操作mysql数据库,首先要在本地或服务器安装mysql数据库. 安装参考:https://mp.csdn.net/postedit/8 ...
- python 数据结构中被忽视的小技巧
一.一个包含N个元素的字符串.元组.序列.以及任何可迭代对象均可以拆分成N个单独的“变量” 1.字符串的拆分 #字符串 In [10]: s="abdefg" In [11]: o ...
- 有序的数据结构中:内存操作红黑树快,磁盘操作b+树快
红黑树常用于存储内存中的有序数据,增删很快,b+树常用于文件系统和数据库索引,因为b树的子节点大于红黑树,红黑树只能有2个子节点,b树子节点大于2,子节点树多这一特点保证了存储相同大小的数据,树的高度 ...
- linux 内核的链表操作(好文不得不转)
以下全部来自于http://www.ibm.com/developerworks/cn/linux/kernel/l-chain/index.html 无任何个人意见. 本文详细分析了 2.6.x 内 ...
- Python链表操作(实现)
Python链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题.链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一.在本文中,我将针对链表本身的数据结构特 ...
- Python面试常考点之深入浅出链表操作
Python面试常考点之深入浅出链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题.链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一.在本文中,我将针对 ...
- Python线性表——单链表
1. 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列.线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,有且只有一个直接后继,而序列头元素没有直接前驱 ...
- 使用python实现数组、链表、队列、栈
引言 什么是数据结构? 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成. 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表,集合和字 ...
- [Data Structure] 数据结构中各种树
数据结构中有很多树的结构,其中包括二叉树.二叉搜索树.2-3树.红黑树等等.本文中对数据结构中常见的几种树的概念和用途进行了汇总,不求严格精准,但求简单易懂. 1. 二叉树 二叉树是数据结构中一种重要 ...
随机推荐
- zookeeper单机版安装
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...
- Oracle SQL Developer连接报错以及链接oracle的sqlplus出现协议适配器错误
之前用的好好的Oracle SQL Developer,不知道是不是匆忙关闭软件啥东西没保存或是删了什么东西,今天突然用不了的. 大清早的,打开Oracle SQL Developer,就给我一个惊喜 ...
- 【并发】3、LockSupport阻塞与唤醒,相较与wait和notify
我们可以使用wait和notify分别对象线程进行阻塞或者唤醒,但是我们也可以使用LockSupport实现一样的功能,并且在实际使用的时候,个人感觉LockSupport会更加顺手 范例1,wait ...
- div在页面垂直居中方法---增强改进版
div在页面垂直居中方法---改进版 .wrap{ background: #ffffff; position:absolute; margin:auto; top:; bottom:; left:; ...
- odoo开发笔记 -- odoo和postgresql数据库导入相关
odoo数据库 导入.导出 首先odoo框架下postgresql数据库中,表结构的存储方式: 存在id(小写),并没有所谓的外部ID 例如数据库中的国家表:模块名_tb_country (注意: ...
- MATLAB下数组随机打乱顺序的方法
一:问题 有两个规模相同的数组,两个数组相同位置的元素一一对应,现在要将两数组的元素同时打乱顺序,并且乱序后的两数组对应位置元素要保持乱序前的对应关系. 二:方法 采用randperm()函数,产生 ...
- 集合框架_DAY15
1:集合(掌握) (1)集合的由来 我们需要对多个对象进行存储和获取.可以使用对象数组.但是,如果对象的个数是变化的,对象数组就解决不了了.怎么办呢?java就提供了集合类解决. (2)集合和数组的区 ...
- python可变对象与不可变对象的差别
一.可变对象和不可对象 Python在heap中分配的对象分成两类:可变对象和不可对象.所谓可变对象是指,对象的内容可变,而不可变对象是指内容不可变. 不可变对象:int.string.float ...
- 通俗易懂详解Java代理及代码实战
一.概述 代理模式是Java常用的设计模式之一,实现代理模式要求代理类和委托类(被代理的类)具有相同的方法(提供相同的服务),代理类对象自身并不实现真正的核心逻辑,而是通过调用委托类对象的相关方法来处 ...
- 【转】谷歌三大核心技术(一)The Google File System中文版
The Google File System中文版 译者:alex 摘要 我们设计并实现了Google GFS文件系统,一个面向大规模数据密集型应用的.可伸缩的分布式文件系统.GFS虽然运行在廉价 ...