c++ - 用双链表实现的堆栈的一个错误

标签 c++ linked-list stack

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/

相关文章:

c++ - 使用 std::vector 和 boost::thread 进行内存管理

java.lang.Boolean 无法转换为 java.util.LinkedList

c++ - 我的一份列表拷贝的尺寸在我的堆栈中打印不正确

java - 完成另一个类(class)的 Activity

c++ - 运算符的不明确重载

c++ - Cmake 仅包含 header 目标来自仅 header 目标

c - 调试链表

c - 函数中的链表

c++ - 在堆栈 C++ 的链表实现中跟踪堆栈大小

c++ - 我应该在新的 C++ 项目中使用指南支持库 (GSL) 吗?