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

链表与顺序表对比

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值