python单链表的基本操作,python实现双向链表
本文主要详细介绍python单向链表的例子。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
用python实现单向链表,供大家参考。具体情况如下
单向链表:所有的数据都被当作节点,所有的节点都链接在一起。每个节点分为:数据存储区和链接区。
存储数据区:存储特定的数据。
链接区域:指向下一个节点。
分析实现:
1.分析:根据链表的特点,首先要有一个存储数据的容器和一个存储节点的容器。
2.在节点类中:应该有数据区和下一个区。
3.在链表类中:存储所有节点。
单链表操作
1.链表是空的吗?
2.链表的长度
3.遍历链表
4.向链表的头部添加元素。
5.在链表的末尾添加元素。
6.在链表中的指定位置添加一个元素。
7.删除链表中的节点。
8.找出该节点是否存在。
代码实现
# Functions函数声明
类节点():
存储节点类
每次调用该类时,都会实例化一个节点。
默认情况下,每个节点中都有一个数据区和一个下一个数据区。
数据区是数据,下一个区是空的。
def __init__(self,item,next=None):
self.item=项目
self.next=下一个
及格
类链表():
存储数据类别
用于存储所有节点的容器。
首先,默认链表是空的。这里需要有一个头节点,默认头节点是空的。
def __init__(self,head=None):
self.head=头
定义为_空(自身):
返回self.head==None
定义附加(自身,项目):
将数据添加到链表的末尾
1.实例化游标:用游标指向每个数据,检索数据,判断下一个数据是否为空。
2.移动光标,从头节点开始,每次都用self.next移动,以为next指向下一个数据。
3.添加数据。首先判断链表是否为空,如果是,直接将头节点等同于节点数据。
4.如果不为空,则需要将光标从开始节点移动,以确定光标所指向的下一个节点是否为空。
5.使用一个不断循环的移动节点,当下一个in节点为空时停止移动。
6.骑行条件:当条件!=None,进入循环得到,cur为空时不会进入循环,所以这里用cur!=无
#首先,您必须实例化一个节点
节点=节点(项目)
#如果链表为空
if self.is_empty():
#直接将下一个头节点添加到该节点
self.head=node
else:
#实例化一个游标
cur=self.head
下一个!=无:
#移动光标以获取最后一个光标的数据
下一个
#将下一个移动的数据添加到节点。
cur.next=node
及格
定义差旅(自助):
遍历数据
#实例化一个游标
cur=self.head
#数据链路为空的情况
if self.is_empty():
打印()
else:
#获取每个数据区中的数据
#移动光标,每次移动时输出数据区的数据。
一边诅咒!=无:
print(cur.item,end= )
下一个
打印()
定义长度(自身):
返回链表的长度
#实例化光标
cur=self
.head
# 计数,这里对空链表进行判断,如果是链表,则不会进入循环,直接输出 0
count = 0
# 移动游标,获取下一个数据,然后让count +=1
while cur != None:
# 计数
count+=1
# 移动游标
cur = cur.next
return count
def add(self, item):
"""
头部添加数据
分析: 将数据添加到第一个节点当中
1、 需要先将node的next指向 原第一个节点,这原第一个节点就是self.head
2、 再讲self.head指向node进行连接
"""
# 先实例化节点
node = Node(item)
# 将数据添加到头部当中
node.next=self.head
self.head=node
def insert(self, index, item):
"""
指定位置添加数据
分析:
1、首先要找到,该位置的数据
2、将要添加的数据next等于 原位置的next数据
3、原数据的 next等于node新数据
"""
if index<=0:
# 如果输入的索引小于或者等于O,默认使用头插发
self.add(item)
elif index>self.length():
# 如果输入的索引大于链表的长度,使用尾插法
self.append(item)
else:
# 实例化数据节点
node = Node(item)
# 找到该数据的位置
# 实例化一个游标
cur = self.head
# 计数
conent = 0
while conent<(index-1):
conent+=1
cur = cur.next
node.next=cur.next
cur.next=node
def search(self, item):
"""
查询指定的数据是否存在
分析: 查询指定的数据,需要对整个链表扫描,判断这个数据是否等的该节点中的数据
"""
# 实例化一个游标
cur = self.head
# 进行判断是否相等
while cur != None:
# 判断
if cur.item == item:
return True
else:
cur = cur.next
pass
# 否则返回False
return False
def remove(self, item):
"""
移除指定的数据
分析:
1、删除数据,需要首先判断数据是否存在
2、找到该数据所在的位置,将该数据的上一个数据的next指向自己的next
3、如何获取该数据的指向,和上一个数据的指向
4、需要定义两个指针
5、先将两个指针相等,再讲一个指针先移动一次,再同时移动
"""
# 先找到该数据
cur = self.head
por = None
while cur != None:
if cur.item==item:
# 要判断是否为第一个节点
if cur == self.head:
self.head = cur.next
else:
por.next = cur.next
break
else:
# 如果在当前节点中没有相等的,将节点进行移动
# 移动要注意,现将两个游标相等,再讲另一个游标移动一次
por = cur
cur = cur.next
测试运行
# 程序的入口if __name__ == "__main__":
s = Linklist()
s.append(100)
s.append(200)
s.append(300)
s.add(1)
s.add(12)
s.insert(-1,6)
s.travel() # 6 12 1 100 200 300
print(s.length()) # 6
print(s.search(11)) # False
s.remove(12)
s.travel() # 6 1 100 200 300
print(s.length()) # 5
print(s.search(11)) # False
pass
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。