-2

为什么我在这段代码中出现运行时错误?它有什么问题?我是链表的新手我无法理解为什么以下代码会给出运行时错误代码有什么问题?我正在尝试动态实现堆栈。请帮忙!

#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;
}
4

1 回答 1

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;

您的其余代码清楚地表明 top == NULL 表示一个空堆栈,因此您top = NULL;最初应该这样做。

于 2013-09-27T10:23:25.853 回答