用栈实现队列:
思路:
利用两个栈,来模拟队列的操作,一个输入栈,一个输出栈,
代码:
class MyQueue:
def __init__(self):
self.stack_out=[]
self.stack_in=[]
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:
if self.stack_in or self.stack_out :
return False
else:
return True
# Your MyQueue object will be instantiated and called as such:
# ob j = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()
遇到的问题:
1.栈的顶指针是指向顶元素+1的位置
用队列实现栈:
思路:
通过两个队列,模拟栈的操作 ,一个输出队列,一个输入队列
代码:
from collections import deque
class MyStack:
def empty(self) -> bool:
if len(self.queue_in) == 0:
return True
else:
return False
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 a in range(len(self.queue_in)-1):
self.queue_out.append(self.queue_in.popleft())
self.queue_in,self.queue_out=self.queue_out,self.queue_in
return self.queue_out.popleft()
def top(self) -> int:
if self.empty():
return None
for i in range(len(self.queue_in)-1):
self.queue_out.append(self.queue_in.popleft())
self.queue_in,self.queue_out=self.queue_out,self.queue_in
temp=self.queue_out.popleft()
self.queue_in.append(temp)
return temp
遇到的问题:
对于队列操作不熟练
有效的括号:
思路:
遍历字符串,检测到有左括号,就向栈中压入一个对应的右括号,当遇到字符串中出现右括号时就比较一个栈顶的括号是否对应,注意可能栈内是空的。
代码:
class Solution:
def isValid(self, s: str) -> bool:
stack=[]
for item in s:
if item =='(':
stack.append(')')
elif item =='[' :
stack.append(']')
elif item =='{' :
stack.append('}')
elif not stack or stack[-1] !=item :
return False
else :
stack.pop()
return True if not stack else False
遇到的问题:
1.忽略了栈是空的情况

被折叠的 条评论
为什么被折叠?



