为什么数字以“ 12-256”,“ 13-256”而不是12,13等形式打印?

时间:2019-03-01 06:11:41

标签: algorithm c++11 data-structures

我正在解决从大学到使用堆栈实现队列的算法问题之一。 我猜我逻辑正确,但数字以 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;
}

Here's my Output.

我基本上是一个Python Guy,所以我无法弄清楚这段代码出了什么问题。

我是C ++的新手,所以请指导我。

谢谢!

1 个答案:

答案 0 :(得分:2)

deQueue遇到以下问题。

  1. 它不返回任何内容。
  2. 在弹出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;

   ...
};

如果您决定进行更改,则必须相应地更新enQueuedeQueue