【发布时间】:2016-10-04 05:09:12
【问题描述】:
我正在尝试创建一个在 C 中实现堆栈的程序。
目前,我的堆栈显示为空。
我认为这是因为我传递了堆栈而不是指向堆栈的指针。
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int info;
struct node * ptr;
}node;
//create
//push
//pop
//destroy
//display
void push(int, node * top_node);
void pop(node * top_node);
void destroy(node * top_node);
void display(node * top_node);
int main(int argc, char** argv)
{
node * top_node = NULL;
push(1, top_node);
push(5, top_node);
push(55, top_node);
display(top_node);
pop(top_node);
display(top_node);
pop(top_node);
display(top_node);
pop(top_node);
display(top_node);
push(1, top_node);
display(top_node);
destroy(top_node);
return (EXIT_SUCCESS);
}
void display(node * top_node)
{
node * temp = top_node;
if(top_node == NULL)
{
printf("The stack is empty\n");
return;
}
while(temp != NULL)
{
printf("%d\n ", temp-> info);
temp = top_node -> ptr;
}
}
void push(int data, node * top_node)
{
if(top_node == NULL)
{
top_node = (struct node **) malloc(1*sizeof(struct node));
top_node ->ptr = NULL;
top_node -> info = data;
}
else
{
node * temp = (struct node *) malloc(1*sizeof(struct node));
temp -> ptr = top_node;
temp -> info = data;
top_node = &temp;
}
}
void pop(node * top_node)
{
node * new_top = top_node;
if(new_top == NULL)
{
printf("\nERROR, the stack is empty");
return;
}
else
{
new_top = new_top -> ptr;
printf("popped value = %d", top_node -> info);
free(top_node);
top_node = new_top;
}
}
void destroy(node * top_node)
{
node * temp = top_node;
while(temp != NULL)
{
temp = top_node -> ptr;
free(top_node);
top_node = temp;
temp = temp->ptr;
}
free(temp);
}
我得到的输出是这样的:
堆栈为空
ERROR,堆栈为空堆栈为空
ERROR,堆栈为空堆栈为空
ERROR,堆栈为空堆栈为空
堆栈为空
运行成功(总时间:227ms)
我认为我应该传递一个指向堆栈的指针,我尝试实现它但它抛出了一堆错误。
如果没有给我完整的答案,我们将不胜感激。
【问题讨论】:
-
什么是
1 * sizeof ...????并且不要投射malloc()。 -
打开编译器警告,并修复它们。你有一些指针类型不匹配,这是不好的。
-
"RUN SUCCESSFUL (total time: 227ms)" - 根据您的输出,您的代码是正确的。够奇怪的。
-
查看我的回答,除了其他回答者发现的问题。
-
为什么我被否决了?我是这个网站的新手,到目前为止它似乎对新用户不太友好。