使用双链表实现堆栈的错误

时间:2013-03-29 06:54:17

标签: 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的值立即变为节点a。

我在main函数中只有一个堆栈实例,因此只有一个顶层,它应保持相同的值,直到我为其赋值。正确?

任何人都可以给我一些提示吗?

(顺便说一下,有没有办法在代码之前添加4个空格而不是输入所有空格?)

1 个答案:

答案 0 :(得分:1)

stack::push(node a)

node x; 
/* other things*/
You wil call this as push(x); 

你正在通过价值传递。也许这会导致一些问题。

top=&a;将存储形式参数的地址。它在推送范围内,当你退出推送功能时,变量将被销毁。