动态堆栈实现 - 这段代码有什么问题?为什么我得到运行时错误?

时间:2013-09-27 10:20:06

标签: c++ stack

为什么我在此代码中出现运行时错误?这有什么问题?我是链接列表的新手我无法理解为什么以下代码给出运行时错误代码有什么问题?我试图动态地实现堆栈。请帮助!

#include <iostream>
using namespace std;
struct stack
{
    int a ;
    struct stack *n;
};
    typedef struct stack st;
    st *top = new st;

//插入元素

 void push(int a)
 {
     st *p;
     p = new st;
     p->n = top;
     top = p;
  }

//提取元素

     int pop()
     {
    st *p;
    p=top;
    if(top == NULL)
    {
            cout<<"stack is already empty";
 }
 else
 {
    top = top->n;
    return p->a;
    delete p;
 }
     }
    //DISPLAY FUNCTION

void display()
{
    st *p;
    p=top;
    while(p!=NULL)
    {
    cout<<p->a;
    p=p->n;
}
cout<<p->a;

}
int main()
{
    push(1);
    push(2);
    push(3);
    push(4);
    push(5);
    display();
    int s=pop();
    cout<<s;
    display();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

此代码错误

void display()
{
    st *p;
    p=top;
    while(p!=NULL)
    {
        cout<<p->a;
        p=p->n;
    }
    cout<<p->a;
}

应该是

void display()
{
    st *p;
    p=top;
    while(p!=NULL)
    {
        cout<<p->a;
        p=p->n;
    }
}

在您的版本中,在退出while循环后p为NULL,因此第二个cout<<p->a;会崩溃您的程序。

此代码错误

st *top = new st;

应该是

st *top = NULL;

其余代码清楚地表明顶部== NULL表示空堆栈,因此您最初应该top = NULL;