C++ 使用堆栈的队列
我很难理解一个问题。这个问题首先要求编写一个C++类来表示一个整数栈,并且完成了很多。以下是我的原型:C++ 使用堆栈的队列,c++,stack,queue,C++,Stack,Queue,我很难理解一个问题。这个问题首先要求编写一个C++类来表示一个整数栈,并且完成了很多。以下是我的原型: class Stack{ private: int top; int item[100]; public: Stack() {top = -1;} ~Stack(); void push(int x) {item[++top] = x;} int pop() {return item[top--];} int empty(int top)
class Stack{
private:
int top;
int item[100];
public:
Stack() {top = -1;}
~Stack();
void push(int x) {item[++top] = x;}
int pop() {return item[top--];}
int empty(int top);
};
第二部分的问题是“使用堆栈存储的目的,编写一个C++类来表示整数队列”。我的队伍如下:
class Queue{
private:
int * data;
int beginning, end, itemCount;
public:
Queue(int maxSize = 100);
Queue(Queue &OtherQueue);
~Queue();
void enqueue(int x);
void dequeue();
int amount();
};
我不明白如何使用堆栈来存储队列。队列是实例中的整数堆栈。将整数添加到堆栈中,然后将其从堆栈中删除。队列是实例中的整数堆栈。将整数添加到堆栈中,然后将其从堆栈中删除。显然,这不是推荐的存储方法,因为一种是后进先出,另一种是先进先出 要排队,可以将整数推到堆栈上
要退出队列,您必须将所有整数从堆栈中弹出,获取最后一个整数,然后将所有其他整数推回到堆栈中。有一个临时堆栈,当您弹出所有整数时,将它们按入堆栈,得到答案,然后将所有整数从临时堆栈中弹出回到主存储器中。显然,这不是推荐的存储方法,因为一种是后进先出,另一种是先进先出 要排队,可以将整数推到堆栈上
要退出队列,您必须将所有整数从堆栈中弹出,获取最后一个整数,然后将所有其他整数推回到堆栈中。有一个临时堆栈,当您弹出所有整数时,您可以在其中推送它们,获取答案,然后将所有整数从临时堆栈中弹出回到主存储器中。我想问题的目的是首先定义一个具有存储整数能力的类堆栈 然后声明一个从堆栈继承的类,名为Queue,它有自己的addtoqueue和servefromqueue函数,但使用与堆栈相同的存储机制
考虑到您的实现,这可能看起来有点奇怪,但他们可能打算使用堆栈的某种链表实现(其优点是没有预定义的上限)在这种情况下,从堆栈继承的队列具有明确的设计意义。我怀疑问题的目的是首先定义一个类堆栈,它具有存储int的能力 然后声明一个从堆栈继承的类,名为Queue,它有自己的addtoqueue和servefromqueue函数,但使用与堆栈相同的存储机制
考虑到您的实现,这似乎有点奇怪,但他们可能打算使用堆栈的某种链表实现(其优点是没有预定义的上限),在这种情况下,从堆栈继承的队列具有明确的设计意义。使用堆栈排队?您将需要2个堆栈,当然这将是一个O(n)队列实现。使用堆栈队列?您将需要两个堆栈,当然这将是一个O(n)队列实现。有不同类型的队列:
注意:您可能希望至少在构建时配置堆栈的最大容量。将其完全动态化可能超出了您试图解决的练习范围。有不同类型的队列:
注意:您可能希望至少在构建时配置堆栈的最大容量。将其完全动态化可能超出了您试图解决的练习范围。队列的私有数据必须是堆栈。当然,只有你能做到这点 仅实施后进先出队列;对于FIFO队列,您需要两个堆栈——引用
练习10的提示“提示:如果您将元素推到堆栈上,然后将它们全部弹出,它们将以相反的顺序显示。如果您重复此过程,它们现在将恢复顺序。”…队列的私有数据必须是堆栈。当然,只有你能做到这点 仅实施后进先出队列;对于FIFO队列,您需要两个堆栈——引用
练习10的提示在这里非常好,“提示:如果您将元素推到堆栈上,然后将它们全部弹出,它们将以相反的顺序显示。如果您重复此过程,它们现在又恢复了顺序。”…堆栈和队列的区别在于,您可以从顶部添加和删除项目,而在队列中,您从顶部添加,从底部删除。因此,要使用堆栈实现队列,排队操作将是对堆栈的正常推送,而出列操作必须弹出整个堆栈,检索最后一个项目,然后将所有项目推回到堆栈上。您必须使用另一个堆栈来临时存储项目。堆栈和队列的区别在于,在堆栈中,您可以从顶部添加和删除项目,而在队列中,您可以从顶部添加和从底部删除项目。这么说吧
void Queue::enqueue(int value) {
stack.push(value);
}
int Queue::dequeue() {
// TODO: Check for empty queue.
Stack tempStack;
do {
tempStack.push(stack.pop());
} while (!stack.empty());
int value = tempStack.pop();
while (!tempStack.empty()) {
stack.push(tempStack.pop());
}
return value;
}