【问题标题】:Adding a node to a linked list stack in C在C中将节点添加到链表堆栈
【发布时间】:2012-04-26 11:35:28
【问题描述】:

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

【问题讨论】:

  • 请将代码的相关部分添加到线程主体
  • 我在正文中添加了推送功能。我相信这是这个问题的相关部分,但我不完全确定问题是什么,所以很难确定相关部分。
  • 这似乎不是问题,但请注意,您在推送元素时不要修改size。另外:您还可以添加示例输入+输出和预期输出吗?

标签: c list linked-list stack


【解决方案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);

解决了这个问题。

【讨论】:

    【解决方案2】:

    很清楚!

    检查一下:

    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;
    

    【讨论】:

    • 转换没有问题。问题仅在于输出说明符。
    • 当然是小错误。多么尴尬。非常感谢大家的帮助!我真的很感激。
    • 是的。问题是 printf %d!
    • 是的。不得不在 printf 中更改它并意识到我需要在参数中更改它以用于我的 void push 函数。我还需要添加一个我忘记的大小增量。发布此内容向我揭示了许多愚蠢的错误,但我很高兴我至少在实施方面有正确的想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    相关资源
    最近更新 更多