理论基础
队列:先入先出
栈:先入后出
232.用栈实现队列
#伪代码
stack in 入栈
stack out 出栈
void push(intx){
stackin.push(x);
}
int pop(){
if stackout.empty():
while(stackin.empty(){
stackout.push(stack.top())
stackin.pop();}
result=stackout.top()
stackout.pop()
result result
}
int peek(){
result=this→pop();
stackout.push(result);
return result;
}
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 None
if self.stack_out:
return self.stack_out.pop()
else:
for i in range(len(self.stack_in)):
self.stack_out.append(self.stack_in.pop())
return self.stack_out.pop()
def peek(self) -> int:
ans=self.pop()
self.stack_out.append(ans)
return ans
def empty(self) -> bool:
return not (self.stack_in or self.stack_out)
25. 用队列实现栈
#两个队列
from collections import deque
class MyStack:
def __init__(self):
self.queue_in=deque()
self.queue_out=deque()
def push(self, x: int) -> None:
self.queue_in.append(x)
def pop(self) -> int:
if self.empty():
return None
for i in range(len(self.queue_in)-1):
self.queue_out.append(self.queue_in.popleft())
temp=self.queue_in
self.queue_in=self.queue_out
self.queue_out=temp
return self.queue_out.popleft()
def top(self) -> int:
return self.queue_in[-1]
def empty(self) -> bool:
return len(self.queue_in)==0
#一个队列
class MyStack:
def __init__(self):
self.queue=deque()
def push(self, x: int) -> None:
self.queue.append(x)
def pop(self) -> int:
if self.empty():
return None
for i in range(len(self.queue)-1):
self.queue.append(self.queue.popleft())
return self.queue.popleft()
def top(self) -> int:
return self.queue[-1]
def empty(self) -> bool:
return len(self.queue)==0