0

我正在使用链表创建一个新堆栈。我不知道为什么 TOP 指针总是指向 NULL。我认为我没有正确设置顶部指针,或者它在函数之外不可见。

#include "stdio.h"
#include "stdlib.h"

typedef struct StackItem
{
      int itemValue;
      struct StackItem* NextItemPtr;
}StackItem;

typedef struct Stack
{
    struct StackItem *TOP;
}Stack;

int IsStackEmpty(StackItem *TOP)
{
     if(TOP==NULL)
         return 1;

}

void pushItem(StackItem *headPtr,int n)
{
    StackItem* Newnode;
    Newnode=(StackItem*)malloc(sizeof(StackItem));
    Newnode->itemValue=n;
    printf("Checking Head TOP %d\n\n",IsStackEmpty(headPtr)); //Everytime it is giving 1 
    Newnode->NextItemPtr=IsStackEmpty(headPtr)?NULL:headPtr;
    headPtr=Newnode;
}


int main()
{
   Stack* stackptr;
   stackptr=(Stack*)malloc(sizeof(Stack));
   stackptr->TOP=NULL;
   pushItem(stackptr->TOP,3);
   pushItem(stackptr->TOP,6);
   return 0;

}
4

2 回答 2

3

该语句对调用者没有任何作用:

headPtr=Newnode;

你可以:

  • 传递一个双指针并分配给*headPtr
  • 返回Newnode而不是分配给headPtr

这个C FAQ解释了这个主题。

于 2013-02-21T17:15:12.410 回答
1
headPtr = Newnode;

由于headPtr是函数的参数,因此它是按值传递的。在函数内部修改它对调用者没有任何影响。您需要将指针传递给它并通过指针对其进行修改:

void pushItem(StackItem **headPtr, int n)
*headPtr = NewNode;
于 2013-02-21T17:16:39.690 回答