我正在解决从大学到使用堆栈实现队列的算法问题之一。 我猜我逻辑正确,但数字以 12-256 , 13-256 , 14-256 的形式打印>代替 12 , 13 , 14 。
这是我的 C ++ 代码
#include <iostream>
using namespace std;
class Stack{
private:
int arr[200];
int tos = -1;
public:
bool empty(){
return (tos == -1)?true:false;
}
void push(int element){
arr[++tos] = element;
}
int pop(){
return arr[tos--];
}
void show(){
if(tos == -1){
cout<<"stack empty";
}else{
for(int i=tos;i>0;i--)
cout<<arr[i]<<"\t";
}
}
};
class Queue{
private:
Stack s1,s2;
public:
void enQueue(int x){
//just using s1 to add new elements
s1.push(x);
}
int deQueue(){
if(s1.empty())
throw 'e';
else{
int e;
while(!s1.empty()){
e = s1.pop();
s2.push(e);
}
cout<<"\nelement to be removed:"<<s2.pop();
if(s2.empty())
throw 'f';
else{
int e;
while(!s2.empty()){
e = s2.pop();
s1.push(e);
}
}
}
}
};
int main()
{
try{
Queue q1;
q1.enQueue(12);
q1.enQueue(13);
q1.enQueue(14);
q1.enQueue(15);
cout<<q1.deQueue();
cout<<q1.deQueue();
cout<<q1.deQueue();
cout<<q1.deQueue();
}catch(char c){
cout<<"\nstack empty!";
}
return 0;
}
我基本上是一个Python Guy,所以我无法弄清楚这段代码出了什么问题。
我是C ++的新手,所以请指导我。
谢谢!
答案 0 :(得分:2)
deQueue
遇到以下问题。
s2
的顶部之后,可以将其为空。这是应该工作的更新版本。
int deQueue(){
if(s1.empty())
throw 'e';
int e;
while(!s1.empty()){
e = s1.pop();
s2.push(e);
}
int ret = s2.pop();
cout<<"\nelement dequeued:"<< ret;
// This is not correct.
// It's OK for s2 to be empty after its top has been popped.
// if(s2.empty())
// throw 'f';
while(!s2.empty()){
e = s2.pop();
s1.push(e);
}
return ret;
}
Queue
不需要两个Stack
对象作为成员变量。 s2
可以是deQueue
中的函数局部变量。
class Queue
{
private:
Stack s;
...
};
如果您决定进行更改,则必须相应地更新enQueue
和deQueue
。