Python 模拟链表

本文介绍了如何使用Python模拟链表,包括链表节点的定义、链表的基本操作如添加、搜索、删除、显示等,以及相关的时间复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看Problem Solving with Algorithms and Data Structures Using Python

看到利用Python 模拟链表。 记录一下


链表(在物理存储单元上非连续、非顺序的数据存储结构)

../_images/idea.png  

../_images/idea2.png

节点

链表的基本模块是节点,每个节点至少拥有两条信息。首先,节点必须包含本身自有的数据,同时还必须拥有对下一个节点的指向。即在节点类中有两个函数,返回节点数据和引用到下一节点。

class Node:
	def __init__(self,initdata):
		self.data = initdata
		self.next = None
	def getData(self):
		return self.data
	def getNext(self):
		return self.next
	def setData(self,newdata):
		self.data = newdata
	def setNext(self,newnext):
		self.next = newnext

链表

链表的第一项必须明确指出,即外部指向的第一项通常称为链表的头,同样,链表的最后一项也必须告诉我们已经没有下一个节点了。

class UnorderedList:
	def __init__(self):
		self.head = None

../_images/linkedlist.png图中的地表示链表的end)

链表应该拥有以下函数:

isEmpty() 判断链表是否为空,算法的复杂度为O(1),因为它只要判断self.head 是否为None。

	def isEmpty(self):
		return self.head == None

serarch(item)判断item是否在链表中,时间复杂度为O(n)。

	def search(self,item):
		current = self.head
		found = False
		while current != None and not found:
			if current.getData() == item:
				found = True
			else:
				current = current.getNext()
		return found

add(item) 将item添加到链表中,add(item)的时间复杂度为O(1),因为只要在链表的头部添加一个新的节点。

	def add(self,item):
		temp = Node(item)
		temp.setNext(self.head)
		self.head = temp

列表中的每个元素必定属于一个节点,第二行创建了一个新的节点并将插入的元素作为节点的数据。通过链接这个新的节点与原有的结构来完成插入元素的工作。
第一个步骤(代码43 是把新插入节点的引用设为原来列表的头节点。由于列表中的其他部分已经和这个新节点正确地连接了,我们可以把列表头部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值