所以我已经有了这段代码:http://pastebin.com/3wuFNWGA
我在.h文件中有这些typedefs:http://pastebin.com/JTG9XHvW
我需要我的 push 函数通过为节点分配内存、将数据(新元素)存储在节点中并将节点插入堆栈顶部来添加节点my_stack。代码运行,但是当我在将新值推送到堆栈后尝试以 my_stack->top->data 打印值时,它总是打印零,而不是我应该推送到堆栈上的元素。
对于我的生活,我不知道为什么。我认为创建新节点并将值存储在数据中时不会出现问题,因此我认为当我尝试将my_stack>顶部指向最近添加的节点时出现问题?
这也是我关于Stack Overflow的第一篇文章。 我希望我做的一切都是对的。
下面是将值推送到堆栈上的 push 函数:
void push( Stack *my_stack, int newElement ) {
Node_s *newNode;
newNode = (Node_s *) malloc(sizeof(Node_s));
if( newNode == NULL ) {
printf("Error: malloc failed in pushn");
exit(EXIT_FAILURE);
}
newNode->data = newElement;
newNode->next = my_stack->top;
my_stack->top = newNode;
}
您的代码将为堆栈的大小打印零,因为您永远不会增加它。
此外,它为元素打印 0,因为数据字段的类型声明为 double
但您使用整数指定符打印它。
改变:
printf("The value at the top of the stack is %dn", my_stack->top->data);
自
printf("The value at the top of the stack is %lfn", my_stack->top->data);
修复了此问题。
很清楚!
检查这个:
typedef struct Node_s {
double data;
struct Node_s* next;
}Node_s;
数据定义为双精度。
但在这里...
push(my_stack, 100);
你试着推一个整数。
所以......也许你检查推送到push(my_stack, 100.00);
或typedef struct Node_s
到:
typedef struct Node_s {
int data;
struct Node_s* next;
}Node_s;