【发布时间】:2016-06-22 12:04:05
【问题描述】:
我尝试在 C 中实现一个堆栈,但我得到一个非常奇怪的错误。由于某种原因,我的推送功能不起作用..
typedef struct node
{
int v;
struct node* next;
}Node;
void push(Node *stack,int val)
{
Node *p = (Node *)calloc(1,sizeof(Node));
p->v = val;
Node *aux = stack;
if(aux == NULL)
{
stack = p;
return;
}
while(aux->next != NULL)
aux = aux->next;
aux->next = p;
}
我用 NULL 初始化了我的堆栈
Node *stack = NULL;
我把这个函数称为这样的
push(stack,value)
L.E. 我试图创建一个带有参数双指针的弹出函数,但结果与推送相同。
void pop(Node **l)
{
if((*l) == NULL)
return;
else
{
Node *aux,*prev;
prev = *l;
aux = prev->next;
if(aux == NULL)
{
free(prev->v);
free(prev);
return;
}
while(aux != NULL)
{
prev = aux;
aux = aux->next;
}
prev->next = NULL;
free(aux->v);
free(aux);
}
}
【问题讨论】:
-
你得到什么错误?是编译错误还是运行时错误?请edit您的问题并附上错误信息。
-
你的栈是一个局部变量,在push被调用的范围内不会改变
-
@Costi Ivan 我已经在回答中展示了 push 和 pop 应该如何查找堆栈。