c - 为什么这个使用链表堆叠的程序不起作用?

标签 c linked-list stack

代码编译得很好,但是当我尝试弹出或显示推送的整数值时,它崩溃了!提前感谢您帮助我。

#include<stdio.h>
#include<stdlib.h>
struct node
 {
int data;
 struct node* next;
}*top=NULL;

 void push(int);
  void pop();
 void display();



 void main()
{
int choice,value;
while(1){
printf("\n-----MENU-----\n");
printf("\n1. Push\n2. Pop\n3. Display\n4. Exit");
printf("\nEnter your choice\n");
scanf("%d",&choice);
switch(choice)
{
    case 1:  printf("Enter a number to push\n");
    scanf("%d",&value);
    push(value);
    break;
    case 2: pop();
    break;
    case 3: display();
    break;
    case 4: exit(0);
}}
getch();
 }

推值函数

void push (int value)
{
struct node*newnode;
newnode = (struct node*)malloc(sizeof(struct node));
newnode->data=value;
if(top==NULL){
newnode->next=NULL;
}
else
{


  newnode->next=top;
  top=newnode;
    printf("Insertion successful\n");
    }
   }

从列表中弹出值的函数

    void pop()
    {

   if (top==NULL)
  {
  printf("Nothing to delete");
 }
 else{
struct node *temp=top;
printf("Deleted element %d", temp->data);
top=temp->next;
free(temp);
}}

显示堆叠元素的函数

 void display()
{
if(top==NULL)
{
    printf("List is empty\n");
}
else
{
    struct node *temp=top;
    while(temp->next!=NULL)
    {
        printf("%d",temp->data);
        temp=temp->next;
    }
    printf("%d ----->NULL", temp->data);
  }
 }

最佳答案

插入第一个元素后忘记设置top,更改为(也永远不要忘记验证您的分配状态):

void push (int value) {
  struct node *newnode = malloc(sizeof(struct node));
  if (newnode==NULL) { /* error */ }
  newnode->data=value;
  newnode->next=top;
  top=newnode;
  printf("Insertion successful\n");
}

关于c - 为什么这个使用链表堆叠的程序不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41887746/

相关文章:

c - 输出如何取决于这段代码中参数的评估顺序?

c - C 中的文件初始化不正确

c - 通过命令行附加到 GNU make 变量

linux - Nasm 程序段错误

linux - Linux .so 函数是否有独立堆栈或与调用者共享堆栈?

c & 海湾合作委员会 : Stack growth and alignment - for a 64 bit machine

c - 递归地反向链接列表

c++ - 使用链表 C++ 的导数计算器

c++ - 克隆一个链表,其中每个节点都有一个指向链表中任何其他节点的随机指针

linux - 运行一个大小为 "Unlimited Stack"的应用会有什么影响?