2014-10-18 3 views
2

Я пытаюсь написать программу, которая реализует стек, используя связанные списки, принимает неограниченное количество слов от пользователя до тех пор, пока не будет введено слово «конец», нажмите каждое слово в стек, напечатайте пользователю, что вы приняли слова, а вы «перечислить предложение в обратном порядке и поместить каждое слово пользователю, чтобы они отображались в обратном порядке, из которого они были введены. У меня есть код написанный, но я думаю, что что-то может быть неправильно с моей функцией pop, потому что это не печать в обратном порядке. Просто заказ, в который я ввел информацию, что означает, что он не появляется, не так ли? Я не уверен.Не знаете, как отменить мой стек?

Так что просто нужно помочь выяснить, как -pop каждое слово для пользователя, так что они появляются в обратном порядке, от которого они были введены

Спасибо! Вот мой код:

функция
#include<iostream> 
#include<conio.h> 
#include<stdlib.h> 
using namespace std; 
class node 
{ 
     public: 
      class node *next; 
      string data; 
}; 

class stack : public node 
{ 
      node *head; 
      int tos; 
     public: 
      stack() 
      { 
       tos=-1; 
      } 
      void push(string x) 
      { 
       if (tos < 0) 
       { 
        head =new node; 
        head->next=NULL; 
        head->data=x; 
        tos ++; 
       } 
       else 
       { 
        node *temp,*temp1; 
        temp=head; 

        tos++; 
        while(temp->next != NULL) 
          temp=temp->next; 
        temp1=new node; 
        temp->next=temp1; 
        temp1->next=NULL; 
        temp1->data=x; 
       } 
      } 
      void display() 
      { 
        node *temp; 
        temp=head; 
        if (tos < 0) 
        { 
         cout <<" stack under flow"; 
         return; 
        } 
        while(temp != NULL) 
        { 
         cout <<temp->data<< " "; 
         temp=temp->next; 
        } 
       } 
       void pop() 
       { 
        node *temp; 
        temp=head; 
        if(tos < 0) 
        { 
         cout <<"stack under flow"; 
         return; 
        } 
        tos--; 
        while(temp->next->next!=NULL) 
        { 
         temp=temp->next; 
        } 
        temp->next=NULL; 
       }  
}; 
main() 
{ 
    stack s1; 
    string input; 

    while (input != "end"){ 
     cout <<"\n enter a element"; 
     cin >> input; 
     s1.push(input); 
    } 
    s1.pop(); 


    s1.display(); 

    exit(0);  
    return (0); 
} 
+1

Если это должно быть ** стек **, ваша логика вставки не имеет смысла. Стеки представляют собой LIFO. что означает единственный указатель, который вам нужно возиться с * push *, - это указатель на голову; **Когда-либо**. Ваш узел узла next-ptr указывает на текущую головку, затем голова устанавливается на новый узел. – WhozCraig

+0

(Что касается реверсирования, все идет.) Все, что вам нужно, это один временный узел. Узнайте, сколько записей в векторе. Затем вы петлите. Возьмите узел [0] и назначьте его temp. Затем возьмите узел [last] и назначьте его узлу [0], затем установите node [last] = temp. –

+0

Ваш вопрос помечен C++, но вы '#include ' и другие вещи. В C++ у нас есть 'std :: stack ', если вам разрешено использовать его. – 5gon12eder

ответ

-1
int display(node * head) 
{ 
     if(head) 
     { 
      display(head->next); 
      cout<< head->data <<endl; 
     } 
} 

Этот дисплей будет печатать свой стек в обратном порядке.

Смежные вопросы