算法与数据结构python实现-栈、链表、队列

数据结构是计算机存储、组织数据的方式
栈:后进先出。进栈和出栈时间复杂度都是O(1)

#创建一个Stack类
Class Stack(object):
	def __init__(self,limit=10):
		self.stack = [] #存放元素
		self.limit = limit #栈容量极限
	#进栈push
	def push(self,data):
		if len(self.stack)>= self.limit
			raise IndexError('超出栈容量极限')
		self.stack.append(data)
	#退栈pop
	def pop(self):
		if self.stack:
			return self.stack.pop()
		else:
			return IndexError('空栈不能被弹出')
	#查看栈最上面的元素peek
	def peek(self):
		if self.stack:
			return self.stack[-1]
	#判断是否为空栈is_empty
	def is_empty(self):
		return not bool(self.stack)
	#栈的大小
	def size(self):
		return len(self.stack)

链表

链表(linked_list)是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。
根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。

#创建一个Node的类,作为基础数据结构:链点
class Node:
	def __init__(self,data):
		self.data = data #对应元素值
		self.next = Node #下一个链接的链点
#创建 Linked_List 类
class Linked_List:
	def __init__(self,head=None):  #链表初始化函数
		self.head = head  #链表头部
	def append(self,new_element):  #在链表后添加一个元素
		current = self.head
		#头部节点存在时
		if self.head:
			while current.next:
				current = current.next
			current.next = new_element
		#头部节点不存在时
		else:
			self.head = new_element
	def is_empty(self): #判断链表是否为空
		return not self.head
	def insert(self,position,new_element): #在链表中指定位置插入元素
		if position <0 or position >self.get_length():
			raise IndexError('insert 插入时,key的值超过了范围')
		temp = self.head
		if position == 0:
			new_element.next = temp
			self.head = new_element
			return
		i =0
		while i<position:
			pre = temp
			temp = temp.next
			i+=1
		pre.next = nex_element
		new_element.next = temp
		
	def remove(self,position):  #删除指定索引的链表元素
		if position<0 or position >self.get_length()-1:
			raise IndexError('删除元素的索引超出范围')
		i =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值