对列:先进先出
栈:后进先出
# 任务对列
class JobQueue:
def __init__(self):
self.l = []
#入队
def push(self,vid:int) -> None:
# 从最左边入队
self.l.insert(0,vid)
print(self.l)
def empty(self) -> bool:
# 不为空返回 flask
return not bool(self.l)
# 出队
def out(self) -> int:
return self.l.pop()
# 两个对列时间 栈
class StackWithTwoQueues(object):
#定义两个空队列
def __init__(self):
self.queue1 = [] # #存放最后插入的数据 #翻转 先插入的数据
self.queue2 = [] #存放最先插入的数据 # 翻转 后插入的数据
#入栈
def push(self, item):
# 向队列中 加入数据 注意是从后边加入的 所以说最右边是最后入队的数据
self.queue1.append(item)
#出栈
def pop(self):
# 长度为0是返回空
if len(self.queue1) == 0:
return(None)
# 大于一时出栈
while(len(self.queue1) != 1):
# 列表1 中最左边也就是说 最早入队的 放入 列表2 ; 此时 列表1:后入队的数据; 列表2:先入队的数据
self.queue2.append(self.queue1.pop(0))
# 将 列表1 和 列表2 进行翻转 ; 也就是 列表2:先入队的数据 列表1: 后入队的数据
# 刚好出栈的就是 后入队的数据 遵循栈的:先进后后出,后进先出的规则;
self.queue1, self.queue2 = self.queue2, self.queue1
return (self.queue2.pop())
if __name__ == '__main__':
# 对列的实现
res = JobQueue()
# 入队
res.push(1)
res.push(2)
# 出队
print(res.out())
print(res.out())
print(res.empty())
# 栈的实现
# 进栈
ss = StackWithTwoQueues()
list = [0, 1, 2, 3, 4]
for i in range(5):
ss.push(list[i])
print(list)
# 出栈
for i in range(5):
print(ss.pop(), ',', end = '')
python实现对列和栈 基本的原理
于 2023-03-23 11:36:44 首次发布