C ++堆栈的简单PUSH函数

时间:2017-08-09 06:52:11

标签: c++

我正在尝试使用链表在C ++中实现一个简单的堆栈,但我完全被PUSH()函数难倒。我整晚都在努力工作,这几乎让我疯狂。它应该在堆栈的顶部插入一个元素,但是我试图实现的每一种方式都存在问题。我的相关代码的摘录如下:

template <typename T>
struct NODE{
  T data;
  NODE<T> *next;
}

template <typename T>
void PUSH(T x, NODE<T> *S){
  NODE<T> *tmp = new NODE<T>;
  tmp->data = x;
  tmp->next = S;
  S = tmp;
}

int main(){
  NODE<int> *test = new NODE<int>;
  test->data = 111;
  test->next = NULL;
  PUSH(99, test);
  PUSH(88, test);
  std::cout << test->data << std::endl;
}

我希望最后一行打印88,但它打印111.当我尝试访问下一个元素时,我得到一个段错误,所以我必须做错了。也许我只是累了,但希望你们中的一个能够对我搞砸的地方有所启发,这对我来说似乎是正确的。

1 个答案:

答案 0 :(得分:1)

void PUSH(T x, NODE<T> *S)
{
}

您按值传递S,因此您在S内对PUSH所做的任何更改都不会在外部显示。即使您要向堆栈添加元素,但是top仍然是第一个节点(111)。

您可以将指针传递给指向S的指针或指向S

的指针
void PUSH(T x, NODE<T> **S)
{
   NODE<T> *tmp = new NODE<T>;
   tmp->data = x;
   tmp->next = *S;
   *S = tmp;
}