python栈的实现
Python中现成的栈就是列表List。
栈是一个特殊的有序列表,其插入和删除操作都在一端(栈顶)进行。
如果把列表的尾部看作栈顶
List.append()=push到栈顶
List.pop()=pop栈顶元素
Python栈所需要的包
from pythonds.basic.stack import Stack
232. 用栈实现队列
思路
不要按照代码随想录的那个图!要晕!!
stack_in=[]:
|_____________
stack_out=[]:
|_____________
把in的元素一个一个pop()并append()到out里,这样out数组直接pop就能完成pop()函数部分
solution
class MyQueue:
# list的append()向列表的末尾添加元素
# list的pop()用于移除列表中的一个元素(默认最后一个元素,即-1),并且返回该元素的值
# list的del()删除某一个index的元素
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()==True:
return None
if len(self.stack_out)!=0:
return self.stack_out.pop() # 与list有关的函数
else:
#out为空
#只有当out不为空的时候才能直接pop(即不能往里加新的值)
#for i in (self.stack_in):
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:
#这里有问题 如果in等于空的话 应该用out去取
#return self.stack_in[len(self.stack_in)-1]
ans=self.pop()
self.stack_out.append(ans)#因为pop肯定是从out出来的
return ans
def empty(self) -> bool:
# 只有in和out都为空才说明队列为空
if len(self.stack_in)==0 and len(self.stack_out)==0:
return True
return False
# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()
??
pop()中的这两个:
#for i in (self.stack_in):
for i in range(len(self.stack_in)):
为什么第一个不对!!!!!???????
因为第一个中stack_in每次都在遍历过程中被动态修改了,但是len()只传一次,没有被修改。
225. 用队列实现栈
思路
如果对于元素1,2,3这个顺序进入栈
栈:从栈顶(出口)到栈底:3,2,1
出来一个元素结果首先是3
队列:队头(出口)到队尾(入口):1,2,3
出来一个元素结果首先是1
solution
class MyStack:
def __init__(self):
self.stack=[] #模拟一个队列
def push(self, x: int) -> None:
self.stack.append(x)
def pop(self) -> int:
if self.empty==True:
return None
for i in range(len(self.stack)-1):
ans=self.stack.pop(0)
self.stack.append(ans)
return self.stack.pop(0)
def top(self) -> int:
ans=self.pop()
self.stack.append(ans)
return ans
def empty(self) -> bool:
if len(self.stack)==0:
return True
else:
return False
# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()