Почему числа печатаются в виде «12-256», «13-256», а не 12,13 и т. Д.? - PullRequest
0 голосов
/ 01 марта 2019

Я решаю одну из задач алгоритмов из университета для реализации очереди с использованием стеков.Я понимаю мою логику правильно, я думаю, но числа печатаются в виде 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, поэтому не могу понять, что не так с этим кодом.

Я новичок в C ++,поэтому, пожалуйста, проведите меня через это.

Заранее спасибо!

1 Ответ

0 голосов
/ 01 марта 2019

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;

   ...
};

Если вы решите внести это изменение, вам придется обновить enQueue и deQueue соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...