📜  门| GATE-CS-2015(Set 2)|问题20(1)

📅  最后修改于: 2023-12-03 14:58:30.105000             🧑  作者: Mango

题目介绍

本题目为GATE-CS-2015 (Set 2)的第20道题目,要求考生实现一个基于数组和堆栈实现的队列。

题目描述

实现一个队列,支持以下操作:

  1. 入队操作
  2. 出队操作
  3. 获取队列长度
  4. 判断队列是否为空

其中队列需要基于数组和堆栈来实现。

解题思路

由于题目要求使用数组和堆栈实现队列,我们可以考虑用一个数组来存储队列元素,同时使用两个堆栈来实现队列的入队和出队操作。

具体来说,在入队时,我们将元素入栈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

总结

本题目要求考生实现基于数组和堆栈的队列,需要考虑如何使用堆栈来实现队列的入队和出队操作,并记录队列中元素的数量,方便实现长度和是否为空的操作。实现思路比较巧妙,需要考虑周全。