python数据结构与算法——链表
具体的数据结构可以参考下面的这两篇博客:
http://www.cnblogs.com/yupeng/p/3413763.html
http://www.cnblogs.com/yupeng/p/3413800.html
我这里只实现了单链表的类型,代码也相对精简一点:
先构造关于节点的类:
class Node:
def __init__(self,data=None,next=None):
self.data = data
self.next = next
节点只有两个成员,一个是节点的数据,一个是链表的键值,用于查找其中的元素,另一个是指向下一个结点的引用。
通过结点,下面实现了链表的类,提供了在链表的两种插入和删除方法
class Chain:
def __init__(self):
self.head = None
self.tail = None
self.count = 0 def append(self,node):
""" 在链表末尾追加元素 """
self.count += 1
if self.head == None:
self.head = node
self.tail = self.head
else:
self.tail.next = node
self.tail = self.tail.next def __repr__(self):
""" 重构:对链表进行输出 """
temp = self.head
cstr = ""
for i in range(self.count-1):
cstr += str(temp.data)+' -> '
temp = temp.next
cstr += str(temp.data)
return cstr def insert(self,n):
""" 在一个有序链表中插入元素
输入 元素的data值
"""
self.count += 1
t = self.head # 暂存头指针,并非其引用
p = Node(n)
if t.data > n:
p.next = t # 可以写成 p.next = self.head
self.head = p # 不能写成 t=p
else:
while t!=None:
if t.next==None or t.next.data > n:
p.next = t.next # 保存后面的节点
t.next = p
break
t = t.next def delete(self,data):
""" 删除链表中指定元素
输入 原素的data值
备注: 如果有多个同样的元素,一次只删除一个
"""
t = self.head # 从头结点开始查找,用于缓存当前结点的父结点
if self.head.data==data:
self.head = self.head.next
self.count -= 1
return True while t.next!=None:
if t.next.data==data: # 找到目标结点为下一个结点
# 意味着必然存在下下个结点
t.next = t.next.next # 将当前结点的下一个结点直向下下个结点
self.count -= 1
return True
else:
t = t.next # 继续找下下个结点
else:
# while-else结构,当while循环没有碰到break时,调用else语句
# 找不到数据
return False
测试结果:
if __name__=="__main__":
L = [1,2,3,4,5]
chain = Chain()
for i in L:
n = Node(i)
chain.append(n) chain.insert(0)
print chain
>>> 0 -> 1 -> 2 -> 3 -> 4 -> 5 chain.delete(3) # 删除中间数据
print chain
>>> 0 -> 1 -> 2 -> 4 -> 5 chain.delete(0) # 删除头数据
print chain
>>> 1 -> 2 -> 4 -> 5 chain.delete(5) # 删除尾数据
print chain
>>> 1 -> 2 -> 4
python数据结构与算法——链表的更多相关文章
- Python 数据结构与算法——链表
#构造节点类 class Node(object): def __init__(self,data=None,_next=None): ''' self.data:为自定义的数据 self.next: ...
- python数据结构与算法
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
- Python数据结构与算法--List和Dictionaries
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
- Python数据结构与算法--算法分析
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
- Python数据结构之单链表
Python数据结构之单链表 单链表有后继结点,无前继结点. 以下实现: 创建单链表 打印单链表 获取单链表的长度 判断单链表是否为空 在单链表后插入数据 获取单链表指定位置的数据 获取单链表指定元素 ...
- JavaScript数据结构与算法-链表练习
链表的实现 一. 单向链表 // Node类 function Node (element) { this.element = element; this.next = null; } // Link ...
- Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- Python数据结构与算法之图的广度优先与深度优先搜索算法示例
本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...
- Python 数据结构和算法
阅读目录 什么是算法 算法效率衡量 算法分析 常见时间复杂度 Python内置类型性能分析 数据结构 顺序表 链表 栈 队列 双端队列 排序与搜索 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归 ...
随机推荐
- 。求推荐一个usb集线器的购买网址
笔记本蓝屏了,虽然后来让笔记本自己呆了好久,它冷静下来后我重新启动它,它又恢复了正常,但是我至今也没搞懂蓝屏的原因,深切地领悟到没文化不可怕,像我这样一知半解的最可怕... ------LYQ --- ...
- Android项目开发遇到的问题(64K的错误)的解决之路,从入坑到出坑
自己一个android项目,一直以来进展还算顺利,没有遇到什么严重性的问题,今天准备给同事手机上安装一下玩玩,谁知丢人丢大,无法build apk!报错!my god,我开发没问题啊,我手机连上usb ...
- Android:Butter Knife 8.0.1配置
github地址:https://github.com/GarsonZhang/butterknife Butter Knife Field and method binding for Androi ...
- 深入浅出设计模式——外观模式(Facade Pattern)
模式动机引入外观角色之后,用户只需要直接与外观角色交互,用户与子系统之间的复杂关系由外观角色来实现,从而降低了系统的耦合度. 模式定义外观模式(Facade Pattern):外部与一个子系统的通信必 ...
- socket初级使用(客户端)
在国庆这段时间里用零星的一些时间看了一下socket的学习资料,由于笔者偏向学习实用方面的内容,因此此篇文章涉及理论知识较少,主要是以实现思路(怎么做)为主,但在实现之前还是需要了解一些基础的理论知识 ...
- $.ajax()常用方法详解(推荐)
AJAX 是一种与服务器交换数据的技术,可以在补充在整个页面的情况下更新网页的一部分.接下来通过本文给大家介绍ajax一些常用方法,大家有需要可以一起学习. 1.url: 要求为String类型的参数 ...
- MFC编程入门之十二(对话框:非模态对话框的创建及显示)
上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 非模态对话框显示后,程序其他窗口仍然能正常运行,可以响应用户输入,还可以相互切换.上一讲中创建的Tip模态对话框 ...
- K-邻近算法
K-邻近算法 采用测量不同特征值之间的距离来进行分类 Ad:精度高,对异常值不敏感,无数据输入假定 Na:计算复杂度高,空间复杂度高 KNN原理 存在样本集,每个数据都存在标签,输入无标签的新数据后, ...
- MySQL 循环执行kill语句杀掉连接
mysql中创建索引时,一直卡住不动,刚开始以为可能是数据量太大导致的,可是一直等了很久还是一样没有反应,看来操作的表被锁住了,执行show processlist 果然发现有大量的lock,使用ki ...
- SPSS数据分析—最小一乘法
线性回归最常用的是以最小二乘法作为拟合方法,但是该方法比较容易受到强影响点的影响,因此我们在拟合线性回归模型时,也将强影响点作为要考虑的条件.对于强影响点,在无法更正或删除的情况下,需要改用更稳健的拟 ...