思路
list.pop():
注意 python 列表 或 数组 中 使用 pop() 函数时,
默认 pop 时, 弹出的是数组中的最后一个元素;
list1 = [3,9,6,8,5,] ;
list1.append(77)
print(list1)
a = list1.pop();
print(a);
a = 5
1 题目分析
方法二 . 两个队列实现栈的功能时;
注意此时,
数组头作为 栈顶,存放的是最后加入的新元素;
数组尾作为 栈底, 存放的是 最开始加入的元素;
一个 主队列: 以最先加入的元素在队尾, 最后加入的元素在队头的形式存储元素;
一个 辅助队列: 用于临时存放当前加入的元素, 以及合并后的元素;
主队列中的 python 形式:
注意, 在Python 数组中, 此时,数组的最左边下标为0 被作为队头(栈顶), 数组末尾最右边 作为 队尾(栈底)
实现流程关键点:
元素入栈时,
-
先将元素放到辅助队列中;
-
此时,判断主队列是否为空,
若为空, 直接交换主队列,辅助队列中的内容;
主队列不为空, 将主队列的中内容依次从队头弹出, 加入到辅助队列中;
此时辅助队列中的元素, 队头 (数组头)便是刚加入的元素 作为栈顶, 队尾(数组尾部)便是最早加入 作为栈底;此时, 再将主队列和辅助队列交换;
元素出栈时, 弹出栈顶元素,即 队头元素, 即主队列的 数组头 -> :
2. 代码
class MyStack:
def __init__(self, ):
self.queue_major = []
self.queue_vise = []
def push(self, x : int) -> None:
self.queue_vise.append(x) # 先将元素加入到辅助队列;
while self.queue_major:
self.queue_vise.append(self.queue_major.pop(0)) # 将主队列中的元素 依次从队头弹出, 添加到 辅助队列中的队尾处;
self.queue_major = self.queue_vise # 将合并后的辅助队列 与 主队列交换;
self.queue_vise = [] # 辅助队列重新 更新为空;
print("the major queue", self.queue_major)
def pop(self,) ->int:
if self.empty():
return
else:
return self.queue_major.pop(0)
def top(self, ) ->int:
return self.queue_major[0] # 注意 这里返回的是 数组的下标;
def empty(self,) ->bool:
if not self.queue_major:
return True
else:
return False
if __name__ == "__main__":
obj1 = MyStack()
str1 = obj1.push(6)
str1 = obj1.push(5)
str1 = obj1.push(9)
str1 = obj1.push(3)
str1 = obj1.push(55)
# str1 = obj1.strStr("hello", "ll")
# str1 = obj1.strStr("aaaaa", "bba")
# str1 = obj1.strStr("aaaaa" ,"bba")
print(str1)