C ++中堆栈的链表实现

时间:2017-02-12 05:30:18

标签: c++ linked-list

我试图在堆栈中使用简单的Push,Pop和Show函数作为链表实现。我认为Push功能正常工作,但我在使用Show和Pop时遇到了麻烦。每当我使用Pop函数时,我只得到一个结果,下次它说“ Stack Empty !! ”。我认为我正在做一个逻辑错误。请帮帮我。我正在使用Turbo C ++ 4.5。我发布下面的代码。提前谢谢!

#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();
}

3 个答案:

答案 0 :(得分:1)

第二次推送后,您不能将temp节点链接到现有的堆栈&#39;。

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

为什么你需要这个?我想你每次都要在Push方法中更新top节点。

答案 1 :(得分:0)

PUSH函数中,如果nodetop,则实际上只对新NULL执行任何操作,因此忽略所有推送到非空堆栈的操作(除了他们泄漏记忆)。试试吧。

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

答案 2 :(得分: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,因此它不能返回任何值......并且正确的声明应为

void POP()
{

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

}

在SHOW函数中,else部分应为

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

我建议您使用Codeblocks,因为它比Turbo C ++更清晰,更简单。

您可以通过这篇文章Stack Using Linked List in C++

清除您的概念