playmaker99 2021-06-23 16:18 采纳率: 66.7%
浏览 25

为什么还没运行完程序就终止

源代码如下,完成初始化后,执行直接插入命令,程序会终止。

#include <stdio.h>

#include <iomanip>

#include <conio.h>

#include <stdio.h>

#include <process.h>

#include <string.h>

#include <math.h>

#include <stdlib.h>

 

#define max 10000 

 

//定义结点类型

struct Node{

  int data;

  Node *next;

  };

 

Node Head; //头结点

Node *DLList; //头指针

 

void init(Node *DLList);

void display(Node *DLList);

void insert(Node *DLList);

void search(Node *DLList);

void del(Node *DLList);

 

int main()

{

 char choice;

 

 DLList=&Head; //使头指针指向头结点

 Head.next=NULL; 

 

 while (1)

 {

  system("cls");

  printf( "\n\n\n\n");

  printf( "\t\t 单链表操作 \n");

  printf( "\t\t======================================");

  printf( "\n\n");

  printf( "\t\t 1:初始化 \n");

  printf( "\t\t 2:显示 \n");

  printf( "\t\t 3:单个插入 \n");

  printf( "\t\t 4:查找 \n");

  printf( "\t\t 5:删除 \n");

  printf( "\t\t 0:退出 \n");

  printf( "\n");

  printf( "\t\t请选择:");

 

  choice = getch();

  system("cls");

  

  switch(choice)

  {

   case '1':

    init(DLList);

    break;

   case '2':

    display(DLList);

    break;

   case '3':

    insert(DLList);

    break;

   case '4':

   // search(DLList);

    break;

   case '5':

   // del(DLList);

    break;

   case '0':

    exit(0);

  }

 }

}

 

//公用的等待函数

void wait()

{

 printf( "\n\n请按任意键继续");

 getch();

}

//屏幕提示后,从键盘输入线性表长度和随机数种子,生成以DLList为头指针的指定长度的线性表

void init(Node *DLList)

{

 int length;

 Node *p,*q;

 while (1)

 {

     printf("输入元素个数(0- %d ):" , max);

  scanf("%d",&length);

  if (length >= 0 && length <= 10000)

   break;

  

 }

 

    int i;

 while (1)

 {

     printf( "输入随机数种子(0-32767):" );

  scanf("%d",&i);

  if (i >= 0 && i <= 32767)

   break;

 

 }

 

    //从线性表中删除并释放原有的结点,使其成为空表

 p=DLList;

 while (p->next!=NULL)

 {

  q=p->next;

  p->next=q->next;

  free(q);

 }

 

 srand(i); //指定随机数种子,相同的种子将产生相同的数据序列

 rand();  

 

 //向线性表插入length个新结点

    for (int j=1;j<=length;j++)    

    {

  p=new Node;

  p->next=DLList->next;

  DLList->next=p;

  p->data=rand() % 10000;

    }

}

 

//在屏幕上依次显示以DLList为头指针的线性表中的全部元素和元素个数

//格式应便于观察

//如果需要指定输出的宽度,可以使用 cout << setw(W) << X ,其中 X 是输出的数值,W 是占据的列数

void display(Node *DLList)

{

 if(DLList->next==NULL)printf("The list is empty.\n");

 else {

  int i,count=0;

  Node *p;

  p=DLList;

  for(i=1;p->next;i++)

  {

   printf("NO.%d:%d\n",i,p->next->data);

   p=p->next;

  }

  printf("The number of elements is %d\n",i-1);

 }

system("pause"); 

 

}

//屏幕提示后,从键盘输入一个元素值,然后把这个新元素插到以DLList为头指针的线性表的末尾

void insert(Node *DLList)

{

 Node *p,*q;

 printf("Please input the element you want to insert:");

 scanf("%d",&p->data);

 p->next=NULL;

 q=DLList;

 while(q->next!=NULL)

 {

  q=q->next;

 }

 q->next=p;

system("pause");

}

 

 

//屏幕提示后,从键盘输入一个元素值,在以DLList为头指针的线性表中搜索这个元素

void search(Node *DLList)

{

}

 

//屏幕提示后,从键盘输入一个元素值,在以DLList为头指针的线性表中删除这个元素

//屏幕显示删除成功与否的信息

void del(Node *DLList)

{

}

 

//应用题

 

/*

    6、将链接存储线性表逆置,即最后一个结点变成第1个结点,原来倒数第2个结点变成第2个结点,如此等等。

    7、生成有序的两个单链表A和B(链表的数据和个数自定),其首结点指针分别为a和b,要求将两

个单链表合并为一个有序的单链表C,其首结点指针为c,并且合并后的单链表的数据不重复。   

    8、将一个首结点指针为a的单链表A分解成两个单链表A和B,其首结点指针分别为a和b,使得链表A中含有原链表A中序号为奇数的元素,而链表B中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 16:48
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?
  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
  • ¥15 MSR2680-XS路由器频繁卡顿问题
  • ¥15 VB6可以成功读取的文件,用C#读不了
  • ¥15 如何使用micpyhon解析Modbus RTU返回指定站号的湿度值,并确保正确?
  • ¥15 C++ 句柄后台鼠标拖动如何实现