栈与队列
- 相同点:线性表
- 不同点:①操作名称:出/入队、出/入栈;②操作限定:队列是在队尾入队,队头出队,即两边都可操作。进\出栈都是在栈顶进行的,无法对栈底直接进行操作;③操作方式:先进先出 先进后出;④遍历:队列队头队尾地址指针遍历(?),不需开辟内存空间(?);栈只能从栈顶遍历,且需要开辟内存空间存储pop出来的数据?
class MyQueue:
def __init__(self):
self.stack_in = []
self.stack_out = []
def push(self, x: int) -> None:
self.stack_in.append(x)
def pop(self) -> int:
if self.empty():
return []
if self.stack_out:
return self.stack_out.pop()
while(self.stack_in):
self.stack_out.append(self.stack_in.pop())
return self.stack_out.pop()
def peek(self) -> int:
res = self.pop()
self.stack_out.append(res)
return res
def empty(self) -> bool:
if not(self.stack_in or self.stack_out):
return True
else:
return False
class MyStack:
def __init__(self):
self.queue_1 = []
self.queue_2 = []
self.size = 0
def push(self, x: int) -> None:
self.size += 1
self.queue_1.append(x)
def pop(self) -> int:
if self.empty():
return []
for i in range(self.size-1):
self.queue_2.append(self.queue_1.pop(0))
self.queue_1,self.queue_2 = self.queue_2,self.queue_1
self.size -= 1
return self.queue_2.pop(0)
def top(self) -> int:
if self.empty():
return []
res = self.pop()
self.size += 1
self.queue_1.append(res)
return res
def empty(self) -> bool:
if self.size==0:
return True
else:
return False