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 ) 定义:由许多相同数据类型的数据项按照特定顺序排列而成的线性表. 特点:各个数据在计算机中是随机存放且不连续. 优点:数据的增删改查都很方便,当有新的数据加入的时候 ...
随机推荐
- Ubuntu 安装phpMyAdmin + 配置nginx
0x01 安装phpMyAdmin ``` sudo apt-get install phpmyadmin ``` 0x02 添加链接 ``` sudo ln -s /usr/share/phpMyA ...
- Linux - 通过SecureCRT的rz、sz和sftp实现文件的上传和下载
目录 1 通过rz/sz命令上传/下载 1.1 安装lrzsz软件 1.2 rz - 上传文件 1.3 sz - 下载文件 2 通过sftp上传/下载文件 2.1 关于SFTP的简介 2.2 SFTP ...
- Jenkins~配合Docker及dotnetCore进行生产和测试环境的灵活部署
回到目录 首先要清楚本文是讲dotnetcore项目在生产和测试环境部署的,这在过去的frameworks项目里,我们可以通过设置web.config的环境变量,然后再发布时指定具体的变量,去实现生产 ...
- Django-restframework 之权限源码分析
Django-restframework 之权限源码分析 一 前言 上篇博客分析了 restframework 框架的认证组件的执行了流程并自定义了认证类.这篇博客分析 restframework 的 ...
- [Nodejs] node实现静态文件服务器
node 静态文件处理 一般后端进行静态文件处理都是使用 Apache nginx 等静态 web 服务器,但是既然使用 node 了,就用 node 实现以下静态服务器吧. 之前弄了不少充满艺术的数 ...
- WebSocketSharp 的使用
Server 端示例代码: class Program { static void Main(string[] args) { var wssv = new WebSocketServer(" ...
- VUE v-for问题
今天写一个拖动然后使装备交换的功能,在背包格子里 发现直接设置Bags数组的项,v-for渲染出来的列表不会对应改变,只有设置值才会改变 有点拗口,贴代码吧 var repear = this.Bag ...
- 包、继承以及 LeetCode 27、28题
1 package.import 和 import static 1.1 Package Java 引入了包(Package)机制,提供了类的多层命名空间,用于解决类的命名冲突.类文件管理问题.Jav ...
- mysql进阶知识
一.存储引擎 引擎 指的是一个系统的核心部分 引擎有不同分类是为了适应不同的使用场景 查看mysql支持所有引擎 show engines; MRG_MYISAM 是一堆MYISAM表的集合 用于做水 ...
- 1.4 GPU分析
shader 加宏 编译说明glsl