|
发表于 2020-9-17 19:53:37
|
显示全部楼层
- #include <conio.h>
- #include <stdio.h>
- #include <process.h>
- #include <string.h>
- #include <math.h>
- #include <stdlib.h>
- typedef struct Node {
- int data;
- Node *next;
- }Node;
- Node Head; //头结点
- Node *DLList; //头指针
- void init(Node *DLList);
- void display(Node *DLList);
- void insert(Node *DLList1, int, int);
- void search(Node *DLList1, int);
- void del(Node *DLList1, int);
- int main()
- {
- char choice;
- int wz, key;
- key = 0;
- 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 = getchar();
- system("cls");
- switch (choice)
- {
- case '1':
- //调用实现函数
- init(DLList);
- break;
- case '2':
- //调用实现函数
- display(DLList);
- break;
- case '3':
- //位置wz,需插入的数key
- break;
- case '4':
- //请输入需要查找的数key
- {
- int c = 0;
- printf("请插入需要查找的数字: ");
- scanf_s("%d", &c);
- search(DLList, c);
- break;
- }
- //调用实现函数
- break;
- case '5':
- //请输入需要删除的数
- //调用实现函数
- break;
- case '0':
- exit(0);
- }
- }
- return 0;
- }
- //公用的等待函数
- void wait()
- {
- printf("\n\n请按任意键继续\n");
- getchar();
- getchar();
- }
- void init(Node *DLList)
- {
- int length;
- Node *p, *q;
- while (1)
- {
- printf("输入元素个数(0- 10000 ):\n");
- scanf_s("%d", &length);
- if (length >= 0 && length <= 10000)
- break;
- printf("\n");
- }
- int i;
- while (1)
- {
- printf("输入随机数种子(0-32767):\n");
- scanf_s("%d", &i);
- if (i >= 0 && i <= 32767)
- break;
- printf("\n");
- }
- //从线性表中删除并释放原有的结点,使其成为空表
- 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;
- }
- }
- void display(Node *DLList)
- {
- Node *p;
- int count = 0;
- p = DLList;
- p = p->next; //头结点未初始化,值自动为0,需要跳过头结点
- while (p)
- {
- printf("%d ", p->data);
- p = p->next;
- count++;
- }
- printf("\n");
- printf("元素个数:%d", count);
- wait();
- }
- //4.屏幕提示后,在以DLList1为头指针的线性表中搜索这个元素key,并给出相应的位置或不存在
- void search(Node *DLList1, int key)
- {
- Node *p;
- int i = 0;
- int flag = 1;
- p = DLList;
- while (p != NULL)
- {
- p = p->next;
- i++;
- if (p != NULL && p->data == key)
- {
- flag = 0;
- break;
- }
- }
- if (flag)
- {
- printf("元素不存在!");
- wait();
- return;
- }
- else {
- printf("元素所在位置为:%d", i);
- wait();
- }
- }
复制代码 |
|