Python链表的实现与使用(单向链表与双向链表)
参考【易百教程】用Python实现链表及其功能
"""
python链表的基本操作:节点、链表、增删改查
"""
import sys class Node(object):
"""
节点类,实例化后的对象用来表示链表中的一个节点
"""
def __init__(self, dataval=None):
self.dataval = dataval
self.nextval = None class SLinkedList(object):
"""
链表类,用于初始化一个链表,及多链表的一些操作
"""
def __init__(self):
self.headval = None def listprint(self):
"""
打印链表
"""
val = self.headval
while val is not None:
print(val.dataval, end=' ')
val = val.nextval
print() def insertStart(self, newdata):
"""
从链表头插入一个节点
param@newdata: 插入的新节点,为Node类实例对象的dataval
"""
newdata = Node(newdata)
newdata.nextval = self.headval
self.headval = newdata def insertEnd(self, newdata):
"""
从链表尾部插入一个节点
param@newdata: 插入的新节点,为Node类实例对象的dataval
"""
newdata = Node(newdata)
if self.headval == None:
self.headval = newdata
return
else:
temp = self.headval
while temp.nextval:
temp = temp.nextval
temp.nextval = newdata def insertBetween(self, node, newdata):
"""
在链表的node节点后插入一个新元素
param@node: 链表中的一个节点,新插入的元素将插入其后面
param@newdata: 插入的新节点,为Node类实例对象的dataval
"""
if (not node) or node == None:
raise Exception('参数异常!')
else:
newdata = Node(newdata)
newdata.nextval = node.nextval
node.nextval = newdata def removeNode(self, node_val):
"""
从链表中删除值为node_val的节点
param@node_val: 被删除节点的值,即Node类实例对象的dataval
"""
if self.headval == None:
print('链表为空链表!')
else:
if self.headval.nextval == None:
if self.headval == node_val:
sefl.headval = None
else:
return
else:
temp = self.headval
if temp.dataval == node_val:
self.headval = temp.nextval
else:
temp = self.headval
while temp.nextval:
if temp.nextval.dataval == node_val:
temp.nextval = temp.nextval.nextval
break
temp = temp.nextval li = SLinkedList()
e1 = Node('one')
e2 = Node('two')
e3 = Node('three')
li.headval = e1
e1.nextval = e2
e2.nextval = e3
li.listprint()
以上为单向链表一些基本操作的Python实现,接下来也展示一下双向链表的一些简单实现
"""
双向链表
"""
import sys
import collections # 双向链表的节点类
class Node(object):
def __init__(self, data):
self.data = data
self.next = None
self.prev = None # 双向链表类
class DoubleLinkedList(object):
def __init__(self):
self.head = None def push(self, newdata):
"""
尾插法插入数据,也就是向链表的结尾追加元素
param@newdata: 新插入的数据,为Node类的实例对象的data
"""
newdata = Node(newdata)
if self.head == None:
self.head = newdata
elif self.head.next == None:
newdata.next = self.head.next
self.head.next = newdata
newdata.prev = self.head
else:
data = self.head
while data.next:
data = data.next
newdata.next = data.next
data.next = newdata
newdata.prev = data # 正向打印出链表值的函数
def listprint(self):
data = self.head
while data is not None:
print(data.data, end=' ')
data = data.next
print() # # 反向打印出链表值的函数
def listprint_2(self):
data = self.head
while data.next:
data = data.next
while data is not None:
print(data.data, end=' ')
data = data.prev
print() def insert(self, prev_node, newdata):
"""
在链表的一个节点后插入一个节点
param@prev_node: 要插入节点的前一个节点
param@newdata: 插入的节点的值,为Node类实例对象的data
"""
newdata = Node(newdata)
if prev_node is None:
return
elif prev_node.next is None:
newdata.next = prev_node.next
prev_node.next = newdata
newdata.prev = prev_node
else:
prev_node.next.prev = newdata
newdata.prev = prev_node
newdata.next = prev_node.next
prev_node.next = newdata dlist = DoubleLinkedList()
dlist.push('one')
dlist.push('two')
dlist.push('three')
dlist.insert(dlist.head, 'hhh')
dlist.listprint()
dlist.listprint_2()
暂时到这里
Python链表的实现与使用(单向链表与双向链表)的更多相关文章
- Reverse Linked List II 单向链表逆序(部分逆序)
0 问题描述 原题点击这里. 将单向链表第m个位置到第n个位置倒序连接.例如, 原链表:1->2->3->4->5, m=2, n =4 新链表:1->4->3-& ...
- 数据结构——Java实现单向链表
结点类: /** * @author zhengbinMac * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. */ p ...
- C#学习单向链表和接口 IList<T>
C#学习单向链表和接口 IList<T> 作者:乌龙哈里 时间:2015-11-04 平台:Window7 64bit,Visual Studio Community 2015 参考: M ...
- JavaScript实现单向链表结构
参考资料 一.什么是链表结构? 1.1.简介 链表和数组一样, 可以用于存储一系列的元素, 但是链表和数组的实现机制完全不同,链表中的元素在内存不是连续的空间,链表的每个元素由一个存储元素本身(数据) ...
- 数据结构与算法系列2 线性表 链表的分类+使用java实现链表+链表源码详解
数据结构与算法系列2.2 线性表 什么是链表? 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表的链接次序实现的一系列节点组成,节点可以在运行时动态生成,每个节点包括两个 ...
- python数据结构链表之单向链表
单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...
- 用python实现单向链表
单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...
- 用Python写单向链表和双向链表
链表是一种数据结构,链表在循环遍历的时候效率不高,但是在插入和删除时优势比较大. 链表由一个个节点组成. 单向链表的节点分为两个部分:存储的对象和对下一个节点的引用.注意是指向下一个节点. 而双向链表 ...
- python数据结构——单向链表
链表 ( Linked List ) 定义:由许多相同数据类型的数据项按照特定顺序排列而成的线性表. 特点:各个数据在计算机中是随机存放且不连续. 优点:数据的增删改查都很方便,当有新的数据加入的时候 ...
随机推荐
- 网络协议 13 - HTTPS 协议:加密路上无尽头
系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...
- qml demo分析(threading-线程任务)
一.关键类说明 qml内置了WorkerScript组件,该组件有一个source属性,可以加载js文件,含有一个名为message的信号,意味着他有一个默认的onMessage槽函数,除此之外他还有 ...
- qml demo分析(text-字体展示)
上一篇文章分析了一个小游戏,使用qml编写界面+js进行复杂逻辑控制,算是一个比较完整的qml示例代码了,今天就不那么继续变态啦,来看一个简单的字体示例程序吧,该示例代码比较简单,主要是展示了几个简单 ...
- DateTimeHelper【日期类型与字符串互转以及日期对比相关操作】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 实现日期和字符串之间的转换以及日期的相关操作: 1.日期格式的字符串输出为Date类型: 2.将Date类型以指定格式输出: 3.将 ...
- 机器学习——logistic回归,鸢尾花数据集预测,数据可视化
0.鸢尾花数据集 鸢尾花数据集作为入门经典数据集.Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数 ...
- 学习ASP.NET Core Razor 编程系列十三——文件上传功能(一)
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- SLAM+语音机器人DIY系列:(二)ROS入门——8.理解roslaunch在大型项目中的作用
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- 以太坊工作原理之txpool详解
txpool详解 交易池txpool作为区块链系统的重要组成部分,对系统的安全性和稳定性具有重要作用.功能可归纳为:交易缓存.交易验证和交易过滤. 基本介绍 交易分类和缓存 txpool主要包含两个重 ...
- DSAPI 截取被遮挡的窗口图像
Me.BackgroundImage=DSAPI.控件.截取窗体或控件图像(目标窗口句柄) 支持截取被覆盖或隐藏的窗口.
- IOC之Unity的使用详解
原文链接:https://www.cnblogs.com/hua66/p/9670639.html Unity作为Microsoft推出IOC容器,其功能是非常丰富的,其中需要注意的地方也不少.以下是 ...