以单链表为例,单链表理解了,双向链表(或双链表或双面链表),单向循环链表就很容易理解了。

组成: 节点 + 链接

节点由数据区(elem)和连接区(next)组成

链接域next用来存放下一个节点的位置(python中的标识)

变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。

与顺序表比有何优缺点:

链表与顺序表比较

线性表

优点

缺点

比较

链表

节点可以分散存储,充分利用分散的内存

需要多占内存(存节点地址)

查找,尾插法需遍历O(n)

头插法O(1)

顺序表

占内存小

需整块内存,占内存

头插法 O(n),

查找,尾插法O(1)

代码实现:

两部分: 1,创建节点(node)类   2,创建SingleLinkList类

class Node(object):

"""节点"""

def __init__(self,item):

self.item = item

self.next = None

# def __repr__(self):

# return str(self.item)

单链表的操作

is_empty() 链表是否为空

length() 链表长度

travel() 遍历整个链表

add(item) 链表头部添加元素

append(item) 链表尾部添加元素

insert(pos, item) 指定位置添加元素

remove(item) 删除节点

search(item) 查找节点是否存在

class SingleLink(object):

def __init__(self,node=None):

self._head = node

def is_empty(self):

"""链表是否为空"""

return self._head is None

def length(self):

"""链表长度"""

cur = self._head

count = 0

while cur is not None:

cur = cur.next

count +=1

return count

def travel(self):

"""遍历整个链表"""

cur = self._head

while cur is not None:

print(cur.item,end=" ")

cur = cur.next

print("")

def add(self,item):

"""链表头部添加元素"""

node = Node(item)

node.next = self._head

self._head = node

def append(self,item):

"""链表尾部添加元素"""

node = Node(item)

cur = self._head

if self.is_empty():

self._head = node

else:

while cur.next is not None: #while cur is not None:不对

cur = cur.next

cur.next = node

def insert(self,pos, item):

"""指定位置添加元素"""

if pos <= 0:

self.add(item)

elif pos > (self.length()-1):

self.append(item)

else:

node = Node(item)

cur = self._head

count = 0

while count < (pos-1):

cur = cur.next

count +=1

node.next = cur.next

cur.next = node

def remove(self,item):

"""删除节点"""

cur = self._head

pre = None

while cur is not None:

# 找到节点了

if cur.item == item:

#先判断此节点是否为头节点 if cur == self._head or pre is None:

#if self._head.item ==item:

if cur == self._head:

self._head = cur.next

else:

pre.next = cur.next

break

#没找到节点

else:

pre = cur

cur = cur.next

else:

print("没有该节点")

def search(self,item):

"""查找节点是否存在"""

cur = self._head

while cur is not None:

if cur.item == item:

return True

cur = cur.next

return False

注:指针(或叫游标)cur实际也是一个节点类型,所有它即有elem,也有next两个区

代码测试:

if __name__ == '__main__':

ll = SingleLink()

print(ll.is_empty())

ll.add(1)

ll.add(2)

ll.travel()

ll.append(3)

ll.travel()

ll.insert(2,5)

ll.travel()

# ll.insert(0,6)

# ll.travel()

ll.remove(2)

ll.travel()

ll.remove(5)

ll.travel()

ll.add(1)

ll.append(4)

ll.travel()

双向链表,单向循环链表其实类似。关键点在与连接断的时候先断开谁后断开谁顺序不能乱。

python原理及代码_链表的基本原理及Python代码的实现,与,python相关推荐

  1. 一个完整的c语言的单链表代码,单链表完整C语言纯代码.docx

    单链表完整C语言纯代码单链表完整C语言纯代码 带头结点的单链表 PAGE \* MERGEFORMAT 4 单链表 带头结点 #include #include /* 带头结点的单链表的操作 在该链表 ...

  2. 如何用python画爱心表白_程序员式优雅表白,教你用python代码画爱心

    还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧! 用python代码画爱心的思路是怎样的? 1.怎么画心形曲线 2.怎么填满心 ...

  3. 打地鼠c语言代码_女白领在家玩打地鼠游戏,无意间学会python编程,还有教程有源码...

    玩打地鼠的游戏,因为有BUG,需要优化,于是无意间竟然学到了很多python的基础内容. 女白领说:在家玩了一个用python做的打地鼠小游戏,本来也不知道是python,因为不懂编程,只是因为这个打 ...

  4. python 调试代码_菜鸟世界 -借助ipython 调试代码

    1.IPython IPython是一个python的交互式shell,比python默认的shell要好用的多,今天我们就来学习一下如何借用IPython来调试代码 2. 一段有错误的代码 # co ...

  5. 天天向上续 python代码_第46p,8行代码,用Python批量重命名文件

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第46篇文章,第二阶段的课程:Python基础知识:小案例之用Python批量重命名文件. 学习本课程,建议先看一遍:[计算机基础知 ...

  6. 用termux运行python代码_没有电脑?不能运行代码?试试用手机搞定

    今天就来介绍可以在手机和 iPad 上写代码的小工具. iOS 平台:Pythonista Pythonista 自带自动连接,方便移动端敲代码. Pythonista 里面内置一套库,让 Pytho ...

  7. python运行微软图标代码_获取windows程序图标并将其另存为.png Python

    下面我有一些代码,获取一个.exe文件,从中获取图像,并将其保存为.bmp文件.这很好,但我需要保存.bmp与原来的透明背景.exe文件图标.有没有方法可以修改下面的代码来做到这一点?在 代码:def ...

  8. python递归详解_打破递归栈的深度限制: 解析一种Python尾递归优化的方法

    Python的递归调用栈的深度有限制, 可以通过sys.getrecursionlimit()查看. 尾递归在很多语言中都可以被编译器优化, 基本都是直接复用旧的执行栈, 不用再创建新的栈帧, 原理上 ...

  9. 调用python接口并画图_【PySpark源码解析】教你用Python调用高效Scala接口

    点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 机器之心专栏 作者:汇量科技-陈绪 众所周知,Spark 框架主要是由 Scala 语言实现,同时也包含少量 Java 代码.Spa ...

最新文章

  1. 贝塞尔曲线动画demo(仿美人相机效果)
  2. CI框架css引入出现问题
  3. linux乌班图vi怎么使用,Ubuntu上vi(vim)编辑器使用教程
  4. 【Linux系统编程】Linux进程调度
  5. 换种思路去理解设计模式
  6. es6生成器_ES6生成器
  7. 上海芯导电子科技股份有限公司IPO过会
  8. ggmusic java证书过期_证书过期时的Java trustmanager行为
  9. linux 相关命令
  10. 计算机工具栏查看,win10工具栏显示网速小工具_技术教程
  11. 电机学重读(一)基础知识
  12. 利用opencv对图像进行二值化处理
  13. PPT处理控件Aspose.Slides功能演示:使用 Java 在 PowerPoint 中创建和操作表格
  14. 科大讯飞与IBM组队人工智能蓝蓝CP
  15. 麻省理工学院公开课:经典力学
  16. Mac系统更新之前需要准备什么?
  17. Cesium创建任意位置和形状的水纹波浪效果
  18. 苹果手机来电防火墙_苹果手机上的月亮图标是什么意思?原来这么实用,涨知识了...
  19. 加入域时提示“不能访问网络位置” 域
  20. 数字藏品在国内现状是怎样的?

热门文章

  1. 【BZOJ3437】小P的牧场,斜率优化DP
  2. 织梦charset.func.php,织梦程序百度php主动推送代码,亲测可用!
  3. java spi与api,SPI和API之间的区别?
  4. vue 调用c++_electron-vue跨平台桌面应用开发实战教程(七)——ffi调用C++(macOS平台)...
  5. 一般编译器错误_[翻译]MLIR:摩尔定律终结的编译器基础结构
  6. 【英语学习】【Level 07】U07 Stories of my Life L2 I actually did it!
  7. 2021抚顺高考成绩查询,2021年抚顺高考成绩排名及成绩公布时间什么时候出来
  8. wrodpress登录mysql_登陆wordpress后台MySQL错误
  9. unity3d中脚本生命周期(MonoBehaviour lifecycle)
  10. 理论计算机图形渲染技术是否已经到了没有什么可以研究的地步了?