堆栈TOP指针始终为空

时间:2013-02-21 17:13:53

标签: c

我正在使用链表创建一个新堆栈。我不知道为什么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;

}

2 个答案:

答案 0 :(得分:3)

此声明对调用者没有任何作用:

headPtr=Newnode;

你可以:

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

C FAQ解释了这个主题。

答案 1 :(得分:1)

headPtr = Newnode;

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

void pushItem(StackItem **headPtr, int n)
*headPtr = NewNode;