鱼C论坛

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

[学习笔记] 魔术师发牌算法:初始化、创建、录入数据

[复制链接]
发表于 2021-10-13 19:00:35 | 显示全部楼层 |阅读模式

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

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

x
原理:

代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXTSIZE 13

  4. typedef struct Like
  5. {
  6.     int T;
  7.     struct Like *next;
  8. }Like, *Likes;

  9. void InitList(Likes *E);     //创建头节点初始化链表
  10. void GetList(Likes *E);     //在头节点之后创建MAXTSIZE个链表
  11. void LoList(Like *E);       //向链表中写入数据
  12. void PutAList(Like *E);     //确认链表是否创建成功

  13. void LoList(Like *E)         //向链表中写入数据
  14. {
  15.     Like *temp = E->next;   //把循环链表的头节点传给临时变量

  16.     for(int i = 0; i < MAXTSIZE; i++)       //一共就插入MAXTSIZE个数据
  17.     {
  18.         if(i != 0)              //加一个判断不然开始时不执行
  19.         {
  20.             for(int j = 0; j <= i; j++)     //向后循环i个节点
  21.             {
  22.                 temp = temp->next;
  23.                 if(temp->T != 0)
  24.                 {
  25.                     j--;        //本算法的误区在于循环中把已有数据的节点也算在里面了,如果有数据就略过
  26.                 }
  27.             }
  28.         }
  29.         temp->T = i + 1;        //在本节点中插入数据
  30.         PutAList(E);      //调试
  31.     }

  32. }
  33. void PutAList(Like *E)
  34. {
  35.     Like *temp = E->next ;

  36.     do
  37.     {
  38.         printf("<%d>", temp->T);
  39.         temp = temp->next;
  40.     }while(E->next != temp);
  41.     putchar('\n');
  42. }

  43. void GetList(Likes *E)
  44. {
  45.     Like *temp, *tail;

  46.     for(int i = 0; i < MAXTSIZE; i++)\
  47.     {
  48.         temp = (Likes )malloc(sizeof(Like ));
  49.         temp->T = 0;
  50.         temp->next = (*E)->next;

  51.         if((*E)->next == *E)
  52.         {
  53.             (*E)->next = temp;
  54.         }
  55.         else
  56.         {
  57.             tail->next = temp;
  58.         }
  59.         tail = temp;
  60.     }
  61. }
  62. void InitList(Likes *E)
  63. {

  64.     if(*E != NULL)
  65.     {
  66.         Like *temp = (*E)->next, *temps;
  67.         do
  68.         {
  69.             temps = temp;
  70.             temp = temp->next;
  71.             free(temps);
  72.         }while(temp != NULL);
  73.     }
  74.     else
  75.     {
  76.         *E = (Likes )malloc(sizeof(Like ));
  77.     }
  78.     (*E)->next = *E;
  79. }

  80. int main()
  81. {
  82.     Like *F = NULL;
  83.     InitList(&F);
  84.     GetList(&F);
  85.     LoList(F);
  86.     return 0;
  87. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 16:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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