题目: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , 分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )
思路:
根据栈的后进先出原则,所有元素正序入栈后出栈顺序为反序,然后反序进入另一个栈后出栈顺序是正序
import numpy as np
class Stack:
def __init__(self):
self.s = np.array([], dtype=int)
self.length = 0
def append(self, e):
self.s = np.append(self.s, e)
self.length += 1
def delete(self):
e = self.s[self.length - 1]
self.s = np.delete(self.s, self.length - 1)
self.length -= 1
return e
def is_empty(self):
return self.length == 0
class CQueue:
def __init__(self):
self.s1 = Stack() # 入队时元素进入栈s1
self.s2 = Stack() # 出队时元素从栈s2出
def appendTail(self, value: int) -> None:
self.s1.append(value)
def deleteHead(self) -> int:
"""如果s2为空,那么将已有s1元素都转移到s2中,
由于栈 后进先出 的原则,s1出栈的顺序和入栈的顺序相反,
同样因为后进先出的原则,数据反序进入s2,那么出栈的时候就是正序的
"""
if self.s2.is_empty():
while not self.s1.is_empty():
self.s2.append(self.s1.delete())
if self.s2.is_empty():
return -1
e = self.s2.delete()
return int(e)