欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python数据结构与算法——Day3

程序员文章站 2022-05-26 16:11:14
...

单向链表

单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。

Python数据结构与算法——Day3

  1. 表元素域elem用来存放具体的数据
  2. 链接域next用来存放下一个节点的位置(地址)
  3. 变量p指向链表的头节点,从p出发就能找到表中的任意节点

节点实现

# 节点类
class Node:
	def __init__(self,item):
		self.item=item
		self.next=None

# 单链表类
class Link:
	def __init__(self):
		self.head=None
	def is_empty(self):
		return self.head==None
	def length(self):
		cur=self.head
		count=0
		while cur!=None:
			count=count+1
			cur=cur.next
		return count
	def travel(self): # 链表遍历
		cur=self.head
		while cur!=None:
			print(cur.item)
			cur=cur.next
		print("")
	def add(self,item):
		newNode=Node(item)
		newNode.next=self.head
		self.head=newNode
		print("done")
	def append(self,item):
		newNode=Node(item)
		if self.is_empty():
			self.head=newNode
		else:
			cur=self.head
			while cur.next!=None:
				cur=cur.next
			cur.next=newNode
		print("done")
	def insert(self,pos,item):
		if pos<=0:
			self.add(item)
		elif pos>(self.length()-1):
			self.append(item)
		else:		
			newNode=Node(item)
			cur=self.head
			count=0
			while count<(pos-1):
				cur=cur.next
				count+=1
			newNode.next=cur.next
			cur.next=newNode
		print("done")
	def remove(self,item):
		cur=self.head
		pre=None
		while cur!=None:
			if cur.item==item:
				if not pre:
					self.head=cur.next
				else:
					pre.next=cur.next
				break
			else:
				pre=cur
				cur=cur.next
	def search(self,item):
		cur=self.head
		while cur!=None:
			if cur.item==item:
				return True
			else:
				cur=cur.next
		return False

链表与顺序表对比

链表失去了顺序表随机读取的优点,同时由于链表增加了节点的指针域,空间开销大,但对于存储空间的运用比较灵活,即,链表可利用离散的内存空间而顺序表存储元素信息的空间必须是连续的

链表和顺序表的时间复杂度

Python数据结构与算法——Day3
链表和顺序表在插入和删除时进行的操作侧重点时不同的。链表主要耗时在遍历查找部分,本身的插入和删除的时间复杂度为O(1),而顺序在插入或删除时主要侧重对元素的移位操作,这种操作是通过拷贝和覆盖完成的