這是程序。堆棧,推送和彈出功能不起作用
#include<iostream>
#include<string>
using namespace std;
struct stack
{
int inf;
stack* link;
} *start, *p;
void push(stack*, stack*, int);
void pop(stack*, stack*);
int main()
{
int s = 0;
string thing;
cin >> thing;
while (thing != "end")
{
if (thing == "push")
{
push(start, p, s);
}
if (thing == "pop")
{
pop(start, p);
}
cin >> thing;
}
return 0;
}
void push(stack *start, stack *p, int s)
{
cin >> s;
p = start;
start = new stack;
start->inf = s;
start->link = p;
cout << "pushed " << start->inf << endl;
}
void pop(stack *start, stack *p)
{
cout << "popped " << start->inf;
p = start;
start = start->link;
delete p;
}
這是一個簡單的程序,讓我push和pop的項目,並從堆棧,但出於某種原因,pop()
是行不通的。如果我在pop
之前添加if(start)
,它只是跳過它,使我認爲在push
完成之後堆棧以某種方式變爲NULL。基本上所有東西都可以工作,直到它到達cout << "popped " << start->inf;
行,當它剛剛崩潰時(沒有錯誤信息),這又使我認爲堆棧在到達pop()
之前變爲空。有什麼建議麼?
推的邏輯貌似可以在max.You跟蹤只有兩個推的需要重新思考邏輯。 –
您正在按價值傳遞您的指針。所以在運行push start之後,p在main()中保持不變。 – drescherjm
在這段代碼中,'start'是一個由'NULL'(隱含地)初始化的指針。你爲什麼期望它是非空的? –