在 C 语言中将节点添加到链表堆栈



所以我已经有了这段代码: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;

相关内容

  • 没有找到相关文章

最新更新