0

所以我已经有了这个代码:http: //pastebin.com/3wuFNWGA

我在 .h 文件中有这些 typedef:http: //pastebin.com/JTG9XHvW

我需要我的 push 函数通过为节点分配内存、将数据(新元素)存储在节点中并将节点插入堆栈顶部来将节点添加到 my_stack。代码运行,但是当我在将新值推送到堆栈后尝试打印 my_stack->top->data 中的值时,它总是打印零,而不是我应该推送到堆栈上的元素。

对于我的生活,我无法弄清楚为什么。我认为当我创建新节点并将值存储在数据中时不会出现问题,所以我认为当我尝试将 my_stack->top 指向最近添加的节点时会出现问题?

这也是我在 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 push\n");
            exit(EXIT_FAILURE);
    }
    newNode->data = newElement;
    newNode->next = my_stack->top;
    my_stack->top = newNode;
}
4

2 回答 2

1

您的代码将为堆栈的大小打印零,因为您永远不会增加它。

它还为元素打印 0,因为数据字段的类型被声明为,double但您使用整数说明符打印它。

改变:

printf("The value at the top of the stack is %d\n", my_stack->top->data);

printf("The value at the top of the stack is %lf\n", my_stack->top->data);

修复了这个问题。

于 2012-04-14T08:21:03.183 回答
0

这很清楚!

检查这个:

typedef struct Node_s {
  double data;
  struct Node_s* next;
}Node_s;

数据被定义为双精度。

但在这儿...

push(my_stack, 100);

你试着推一个int。

所以......也许你检查推送到push(my_stack, 100.00);typedef struct Node_s到:

typedef struct Node_s {
   int data;
   struct Node_s* next;
 }Node_s;
于 2012-04-14T08:19:45.863 回答