这是程序。堆栈,推送和弹出功能不起作用
#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'(隐含地)初始化的指针。你为什么期望它是非空的? –