2017-02-12 7 views
-1

Я пытаюсь использовать простые функции Push, Pop и Show в стеке в качестве реализации связанного списка. Думаю, функция Push работает правильно, но у меня возникают проблемы с Show и Pop. Всякий раз, когда я использую функцию Pop, я получаю только один результат, и в следующий раз, когда он говорит: «Stack Empty !!». Думаю, я делаю логическую ошибку. Пожалуйста, помогите мне с этим. Я использую Turbo C++ 4.5. Я размещаю код ниже. Заранее спасибо!Связанный список реализации стека в C++

#include<iostream.h> 
#include<conio.h> 
#include<process.h> 
struct node 
{ 
    int data; 
    node *link; 
}; 
node *temp, *top; 
void PUSH() 
{ 
    temp=new node; 
    cout<<"\nEnter data item:"; 
    cin>>temp->data; 
    temp->link=NULL; 
    if(top==NULL) 
    { 
     temp->link=top; 
     top=temp; 
    } 
} 

void POP() 
{ 
    if(top==NULL) 
    { 
     cout<<"\nEmpty"; 
     return; 
    } 
    temp=top; 
    top=top->link; 
    cout<<"\nDeleted value is : "<<temp->data; 
    temp->link=NULL; 
    delete(temp); 
} 

void SHOW() 
{ 
    if(top==NULL) 
    { 
     cout<<"\nEmpty!!"; 
     return; 
    } 
    while(temp!=NULL) 
    { 
     cout<<temp->data<<endl; 
     temp=temp->link; 
    } 
} 

void main() 
{ int ch; 
    do{ 
    cout<<"\nEnter your choice"; 
    cout<<"\n1.Push\n2.Pop\n3.Show\n4.Exit"; 
    cin>>ch; 
    switch(ch) 
    { 
     case 1: PUSH(); 
     break; 
     case 2: POP(); 
     break; 
     case 3: SHOW(); 
     break; 
     case 4: exit(0); 
     break; 
    } 
    }while(ch!=4); 
    getch(); 
} 
+0

Это не выглядит, как вы инициализированная 'top' быть' 'NULL' в узле * темпе * сверху;', но вы проверили, если 'top' был 'NULL' в' PUSH() ' –

+0

Пожалуйста, прочитайте о ООП (у вас это есть с C++). Также используя стандартную библиотеку - это уже сделано для вас с шаблоном –

+0

Почему вы используете древний компилятор? –

ответ

0

Прежде всего, вам нужно очистить ур понятия о реализации стека через связанный список .....

Ваша функция PUSH должен выглядеть как этот

void PUSH() 
{ 
    temp=new node; 
    cout<<"\nEnter data item:"; 
    cin>>temp->data; 
    temp->link=NULL; 
    if(top==NULL) 
     top=temp;  
    else 
    { 
     temp->link=top;  
     top=temp; 
    } 
} 

Функция POP объявляется недействительным, поэтому он не должен возвращать какое-либо значение ... и правильная декларация должна быть

void POP() 
{ 

    if(top==NULL) 
    { 
     cout<<"\nEmpty"; 
    } 
    else 
    { 
     cout<<"\nDeleted value is : "<<top->data; 
     temp=top; 
     top=top->link; 
     delete(temp); 
    } 

} 

А в функции шоу, еще часть должна быть

 temp=top; 
     while(temp!=NULL) 
     { 
      cout<<temp->data<<endl; 
      temp=temp->link; 
     } 

И я предлагаю вам следует использовать CodeBlocks, как это имеет гораздо чище и проще, чем интерфейс Turbo C++.

Вы можете очистить свои понятия через этот пост Stack Using Linked List in C++

+0

Спасибо, это сработало! Я это знаю, но моя школа ограничивает меня использованием Turbo, пока я не прохожу среднюю школу. –

1

После 2-го нажатия вы не связываете свой узел temp с существующим «стеком».

if(top==NULL) 
{ 
    temp->link=top; 
    top=temp; 
} 

Зачем вам это нужно, если? Думаю, вам нужно обновлять узел top каждый раз в методе Push.

0

В вашей PUSH функции, вы только на самом деле сделать что-нибудь с новым node если top является NULL, так что все толкает на непустой стек, игнорируются (за исключением того, что утечка памяти). Попробуй так.

void PUSH() { 
    temp = new node; 
    cout << "\nEnter data item:"; 
    cin >> temp->data; 
    temp->link = top; 
    top  = temp; 
} 
+0

Все в порядке, но все же мои функции Pop и Show не работают. Они показывают и удаляют только последние данные. Пожалуйста помоги. –

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