鱼C论坛

 找回密码
 立即注册
查看: 1083|回复: 0

[作品展示] S1E47:单链表3--笔记

[复制链接]
发表于 2023-12-14 12:16:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 BaysideLizard 于 2023-12-14 12:20 编辑
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //鱼C论坛——BaysideLizard写于2023年12月14日

  4. struct Numbers
  5. {
  6.     int value;
  7.     struct Numbers *next;
  8. };

  9. void insertNumbers(struct Numbers **headNumbers,int value);
  10. void printNumbers(struct Numbers *headNumbers);
  11. void delNumbers(struct Numbers **headNumbers,int num);

  12. int main()
  13. {
  14.     struct Numbers *headNumbers = NULL;
  15.     int num;

  16.     printf("单链表插入实验\n");
  17.     while(1)
  18.     {
  19.         printf("请输入一个整数(输入-1表示结束):");
  20.         scanf("%d",&num);
  21.         if(num == -1)
  22.         {
  23.             break;
  24.         }

  25.         insertNumbers(&headNumbers,num);
  26.         printNumbers(headNumbers);
  27.     }
  28.     printf("单链表删除实验\n");
  29.     while(1)
  30.     {
  31.         printf("请输入您要删除的整数(输入-1表示结束):");
  32.         scanf("%d",&num);
  33.         if(num == -1)
  34.         {
  35.             break;
  36.         }

  37.         delNumbers(&headNumbers,num);
  38.         printNumbers(headNumbers);
  39.     }

  40.     return 0;
  41. }

  42. void insertNumbers(struct Numbers **headNumbers,int value)
  43. {
  44.     struct Numbers *previous,*current,*nw;
  45.     current = *headNumbers;
  46.     previous = NULL;

  47.     while(current != NULL && current->value < value)
  48.     {
  49.         previous = current;
  50.         current = current -> next;
  51.     }

  52.     nw = (struct Numbers *)malloc(sizeof(struct Numbers));

  53.     if(nw == NULL)
  54.     {
  55.         printf("内存分配失败!\n");
  56.         exit(1);
  57.     }

  58.     nw->next = current;
  59.     nw->value = value;

  60.     if(previous == NULL)
  61.     {
  62.         *headNumbers = nw;
  63.     }
  64.     else
  65.     {
  66.         previous->next = nw;
  67.     }
  68. }

  69. void printNumbers(struct Numbers *headNumbers)
  70. {
  71.     struct Numbers *current;

  72.     current = headNumbers;
  73.     while(current != NULL)
  74.     {
  75.         printf("%d ",current->value);
  76.         current = current->next;
  77.     }
  78.     putchar('\n');
  79. }

  80. void delNumbers(struct Numbers **headNumbers,int value)
  81. {
  82.     struct Numbers *previous,*current;

  83.     current = *headNumbers;
  84.     previous = NULL;

  85.     while(current != NULL && current->value != value)
  86.     {
  87.         previous = current;
  88.         current = current->next;
  89.     }

  90.     if(current == NULL)
  91.     {
  92.         printf("找不到匹配的节点!\n");
  93.         return ;
  94.     }
  95.     else
  96.     {
  97.         if(previous == NULL)
  98.         {
  99.             *headNumbers = current->next;
  100.         }
  101.         else
  102.         {
  103.             previous->next = current->next;
  104.         }

  105.         free(current);
  106.     }
  107. }
复制代码









运行结果:
单链表插入实验
请输入一个整数(输入-1表示结束):1
1
请输入一个整数(输入-1表示结束):3
1 3
请输入一个整数(输入-1表示结束):5
1 3 5
请输入一个整数(输入-1表示结束):7
1 3 5 7
请输入一个整数(输入-1表示结束):8
1 3 5 7 8
请输入一个整数(输入-1表示结束):-1
单链表删除实验
请输入您要删除的整数(输入-1表示结束):5
1 3 7 8
请输入您要删除的整数(输入-1表示结束):1
3 7 8
请输入您要删除的整数(输入-1表示结束):7
3 8
请输入您要删除的整数(输入-1表示结束):0
找不到匹配的节点!
3 8
请输入您要删除的整数(输入-1表示结束):1
找不到匹配的节点!
3 8
请输入您要删除的整数(输入-1表示结束):-1

Process returned 0 (0x0)   execution time : 23.509 s
Press any key to continue.








在FishC学C的第26天

评分

参与人数 1贡献 +3 收起 理由
zhangjinxuan + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-19 21:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表