数据结构----栈和队列----Python

我们知道,顺序表呢在Python中可以看作list和tuple。

仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

作者:yongxinz

链接:https://juejin.im/post/5cdc2321e51d453a543f9e67

来源:掘金

而栈与顺序表不同的是:必须后进先出(LIFI)

class Stack(object):
	def __init__(self):
		self._val = []
	#压入元素
	def push(self,val):
		self._val.append(val)
	#弹出元素,而且会删除
	def pop(self):
		return self._val.pop()
	#返回栈顶元素
	def peek(self):
		return self._val[self.size()-1]
	#判断是否为空
	def is_empty(self):
		return self._val == None
	#返回元素个数
	def size(self):
		return len(self._val)

if __name__ == '__main__':
	stack = Stack()
	stack.push(2)
	stack.push(3)
	stack.push(4)
	stack.push(5)
	tmp = stack.pop()
	print(tmp)
	print(stack.peek())
	print(stack.size())
	print(stack.is_empty())

###结果
5
4
3
False
[Finished in 0.2s]

队列

它的特点就是先进先出(FIFO)

进行插入操作的端(进入的端)称为队尾,进行删除操作的端(出去的端)称为队头。队列中没有元素时,称为空队列。

class Queue(object):
	def __init__(self):
		self._val = []

	#添加元素
	def push(self,val):
		self._val.insert(0, val)
	#删除元素
	def pop(self):
		return self._val.pop()
	#返回栈顶元素
	# is_empty() 判断一个队列是否为空
	def is_empty(self):
		return self._val == []
	# size() 返回队列的大小
	def size(self):
		return len(self._val)

if __name__ == '__main__':
	queue = Queue()
	queue.push(1)
	queue.push(2)
	queue.push(3)
	queue.push(4)
	print(queue.pop())
	print(queue.pop())
	print(queue.pop())
	print(queue.size())
	print(queue.is_empty())

###结果
1
2
3
1
False
[Finished in 0.2s]

双端队列

双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。

class Double(object):
	def __init__(self):
		self._val = []

	#对头插入元素
	def add_front(self,val):
		self._val.insert(0,val)
	#队尾插入
	def add_rear(self,val):
		self._val.append(val)
	# remove_front() 从队头删除一个item元素
	def remove_front(self):
		return self._val.pop(0)
	# remove_rear() 从队尾删除一个item元素
	def remove_rear(self):
		return self._val.pop()	
	# is_empty() 判断双端队列是否为空
	def is_empty(self):
		return self._val == []

	# size() 返回队列的大小
	def size(self):
		return len(self._val)

	def print_items(self):
		print(self._val)

if __name__ == '__main__':
	deque = Double()
	deque.add_front(1)
	deque.add_front(3)
	deque.add_front(5)
	deque.print_items()
	deque.add_rear(9)
	deque.add_rear(8)
	deque.add_rear(7)
	deque.print_items()
	print(deque.is_empty())
	print(deque.remove_front())
	print(deque.remove_rear())
	deque.print_items()

###结果
[5, 3, 1]
[5, 3, 1, 9, 8, 7]
False
5
7
[3, 1, 9, 8]
[Finished in 0.2s]
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值