2013-09-27 37 views
-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; 
} 
+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循環後NULL值爲空,因此第二個cout<<p->a;會使程序崩潰。

這段代碼是錯誤的

st *top = new st; 

應該

st *top = NULL; 

你的代碼的其餘部分可以清楚的頂部== NULL意味着一個空棧,所以你應該做top = NULL;開始。

+0

感謝錯誤已被刪除,但它沒有取任何值,它只是顯示0十次.. – user2177859

+0

@ user2177859您需要將'p-> a = a;'添加到'push'。 – john

相關問題