在C中将节点添加到链接列表堆栈

时间:2012-04-14 08:11:32

标签: c list linked-list stack

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

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

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

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

这也是我在Stack Overflow上的第一篇文章。我希望我做的一切都正确。

这里是将值推送到堆栈的推送功能:

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;
}

2 个答案:

答案 0 :(得分: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);

解决了这个问题。

答案 1 :(得分:0)

很明显!

检查一下:

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

数据被定义为double。

但是这里......

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;