class node{
int data;
public:
node *next;
node *prev;
node(int a){data=a; next=NULL; prev=NULL;}
int retrieve(){return data;}
};
class stack{
node *top;
public:
stack(){top=NULL;}
void push(node);
bool empty();
void printall();
};
void stack::push(node a){
if(top==NULL)
top=&a;
else{
top->next=&a;
top->next->prev=top;
top=&a;
}
}
int main(){
stack st;
cout<<st.empty()<<endl;
node k(3);
node j(4);
node h(5);
st.push(k);
st.push(j);
st.push(h);
st.printall();
}
错误发生在推送功能上。
当我使用 gdb 跟踪 push 函数内部的 top 值时,top 的值立即更改为节点 a。
我在主函数中只有一个堆栈实例,因此只有一个顶部,它应该保持相同的值,直到我为它分配新值。对吧?
谁能给我一些提示?
(顺便说一句,有没有办法在代码前添加 4 个空格而不是键入所有空格?)
最佳答案
堆栈::推送(节点a)
node x;
/* other things*/
You wil call this as push(x);
您正在按值传递。也许这会导致一些问题。
top=&a;
会存放形参的地址。它在 push 的范围内,当你退出 push 函数时,变量将被销毁。
关于c++ - 用双链表实现的堆栈的一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15698788/