python原理及代码_链表的基本原理及Python代码的实现,与,python
以单链表为例,单链表理解了,双向链表(或双链表或双面链表),单向循环链表就很容易理解了。
组成: 节点 + 链接
节点由数据区(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相关推荐
- 一个完整的c语言的单链表代码,单链表完整C语言纯代码.docx
单链表完整C语言纯代码单链表完整C语言纯代码 带头结点的单链表 PAGE \* MERGEFORMAT 4 单链表 带头结点 #include #include /* 带头结点的单链表的操作 在该链表 ...
- 如何用python画爱心表白_程序员式优雅表白,教你用python代码画爱心
还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧! 用python代码画爱心的思路是怎样的? 1.怎么画心形曲线 2.怎么填满心 ...
- 打地鼠c语言代码_女白领在家玩打地鼠游戏,无意间学会python编程,还有教程有源码...
玩打地鼠的游戏,因为有BUG,需要优化,于是无意间竟然学到了很多python的基础内容. 女白领说:在家玩了一个用python做的打地鼠小游戏,本来也不知道是python,因为不懂编程,只是因为这个打 ...
- python 调试代码_菜鸟世界 -借助ipython 调试代码
1.IPython IPython是一个python的交互式shell,比python默认的shell要好用的多,今天我们就来学习一下如何借用IPython来调试代码 2. 一段有错误的代码 # co ...
- 天天向上续 python代码_第46p,8行代码,用Python批量重命名文件
大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第46篇文章,第二阶段的课程:Python基础知识:小案例之用Python批量重命名文件. 学习本课程,建议先看一遍:[计算机基础知 ...
- 用termux运行python代码_没有电脑?不能运行代码?试试用手机搞定
今天就来介绍可以在手机和 iPad 上写代码的小工具. iOS 平台:Pythonista Pythonista 自带自动连接,方便移动端敲代码. Pythonista 里面内置一套库,让 Pytho ...
- python运行微软图标代码_获取windows程序图标并将其另存为.png Python
下面我有一些代码,获取一个.exe文件,从中获取图像,并将其保存为.bmp文件.这很好,但我需要保存.bmp与原来的透明背景.exe文件图标.有没有方法可以修改下面的代码来做到这一点?在 代码:def ...
- python递归详解_打破递归栈的深度限制: 解析一种Python尾递归优化的方法
Python的递归调用栈的深度有限制, 可以通过sys.getrecursionlimit()查看. 尾递归在很多语言中都可以被编译器优化, 基本都是直接复用旧的执行栈, 不用再创建新的栈帧, 原理上 ...
- 调用python接口并画图_【PySpark源码解析】教你用Python调用高效Scala接口
点击 机器学习算法与Python学习 ,选择加星标 精彩内容不迷路 机器之心专栏 作者:汇量科技-陈绪 众所周知,Spark 框架主要是由 Scala 语言实现,同时也包含少量 Java 代码.Spa ...
最新文章
- 贝塞尔曲线动画demo(仿美人相机效果)
- CI框架css引入出现问题
- linux乌班图vi怎么使用,Ubuntu上vi(vim)编辑器使用教程
- 【Linux系统编程】Linux进程调度
- 换种思路去理解设计模式
- es6生成器_ES6生成器
- 上海芯导电子科技股份有限公司IPO过会
- ggmusic java证书过期_证书过期时的Java trustmanager行为
- linux 相关命令
- 计算机工具栏查看,win10工具栏显示网速小工具_技术教程
- 电机学重读(一)基础知识
- 利用opencv对图像进行二值化处理
- PPT处理控件Aspose.Slides功能演示:使用 Java 在 PowerPoint 中创建和操作表格
- 科大讯飞与IBM组队人工智能蓝蓝CP
- 麻省理工学院公开课:经典力学
- Mac系统更新之前需要准备什么?
- Cesium创建任意位置和形状的水纹波浪效果
- 苹果手机来电防火墙_苹果手机上的月亮图标是什么意思?原来这么实用,涨知识了...
- 加入域时提示“不能访问网络位置” 域
- 数字藏品在国内现状是怎样的?
热门文章
- 【BZOJ3437】小P的牧场,斜率优化DP
- 织梦charset.func.php,织梦程序百度php主动推送代码,亲测可用!
- java spi与api,SPI和API之间的区别?
- vue 调用c++_electron-vue跨平台桌面应用开发实战教程(七)——ffi调用C++(macOS平台)...
- 一般编译器错误_[翻译]MLIR:摩尔定律终结的编译器基础结构
- 【英语学习】【Level 07】U07 Stories of my Life L2 I actually did it!
- 2021抚顺高考成绩查询,2021年抚顺高考成绩排名及成绩公布时间什么时候出来
- wrodpress登录mysql_登陆wordpress后台MySQL错误
- unity3d中脚本生命周期(MonoBehaviour lifecycle)
- 理论计算机图形渲染技术是否已经到了没有什么可以研究的地步了?