📅  最后修改于: 2023-12-03 14:58:30.105000             🧑  作者: Mango
本题目为GATE-CS-2015 (Set 2)的第20道题目,要求考生实现一个基于数组和堆栈实现的队列。
实现一个队列,支持以下操作:
其中队列需要基于数组和堆栈来实现。
由于题目要求使用数组和堆栈实现队列,我们可以考虑用一个数组来存储队列元素,同时使用两个堆栈来实现队列的入队和出队操作。
具体来说,在入队时,我们将元素入栈1;在出队时,如果栈2不为空,则将栈2的栈顶元素出栈并返回;否则,我们将栈1中的所有元素依次出栈,并将它们入栈2。这样,我们保证了栈2中的元素顺序和队列中的元素顺序相同。
同时,我们可以使用一个变量记录队列中元素的数量,方便实现获取队列长度和判断队列是否为空的操作。
以下为实现了上述思路的Python代码:
class Stack:
def __init__(self):
self.stack = []
def push(self, x):
self.stack.append(x)
def pop(self):
if not self.isEmpty():
return self.stack.pop()
def top(self):
if not self.isEmpty():
return self.stack[-1]
def isEmpty(self):
return len(self.stack) == 0
def size(self):
return len(self.stack)
class Queue:
def __init__(self):
self.stack1 = Stack()
self.stack2 = Stack()
self.size = 0
def enqueue(self, x):
self.stack1.push(x)
self.size += 1
def dequeue(self):
if self.stack2.isEmpty():
while not self.stack1.isEmpty():
self.stack2.push(self.stack1.pop())
if not self.stack2.isEmpty():
self.size -= 1
return self.stack2.pop()
def isEmpty(self):
return self.size == 0
def __len__(self):
return self.size
本题目要求考生实现基于数组和堆栈的队列,需要考虑如何使用堆栈来实现队列的入队和出队操作,并记录队列中元素的数量,方便实现长度和是否为空的操作。实现思路比较巧妙,需要考虑周全。