我正在使用链表创建一个新堆栈。我不知道为什么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;
}
答案 0 :(得分:3)
答案 1 :(得分:1)
headPtr = Newnode;
由于headPtr
是函数的参数,因此它是按值传递的。在函数内部修改它对调用者没有任何影响。您需要传递指针并通过指针修改它:
void pushItem(StackItem **headPtr, int n)
*headPtr = NewNode;