day5,数据布局,单向,双向,循环链表

[复制链接]
发表于 2025-12-4 20:59:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
1】头脑导图

2】完成单向循环链表的全部操纵 【创建、判空、尾插、遍历、尾删、烧毁】
创建:
  1. LooplinkPtr caerte()
  2. {
  3.         LooplinkPtr h=(LooplinkPtr)malloc(sizeof(Looplink));
  4.         if(NULL==h)
  5.         {
  6.                 printf("创建失败\n");
  7.                 return NULL;
  8.         }
  9.         h->len=0;
  10.         h->data=0;
  11.         h->next=h;
  12.         printf("创建成功\n");
  13.         return h;
  14. }
复制代码
判空:
  1. int empt(LooplinkPtr h)
  2. {
  3.         if(NULL==h)
  4.         {
  5.                 printf("判空失败\n");
  6.                 return -1;
  7.         }
  8.         return h->next==h;
  9. }
复制代码
尾插:
  1. void Tail_Add(LooplinkPtr h,DataType a)
  2. {
  3.         if(NULL==h)
  4.         {
  5.                 printf("尾插失败\n");
  6.                 return ;
  7.         }
  8.         LooplinkPtr p=node_caerte(a);
  9.         LooplinkPtr p1=h;
  10.         while(p1->next!=h)
  11.         {
  12.                 p1=p1->next;
  13.         }
  14.         p1->next=p;
  15.         p->next=h;
  16.         h->len++;
  17.         return;
  18. }
复制代码
 遍历:
  1. void show(LooplinkPtr h)
  2. {
  3.         if(NULL==h||empt(h))
  4.         {
  5.                 printf("打印失败\n");
  6.                 return ;
  7.         }
  8.         LooplinkPtr p=h;
  9.         while(p->next!=h)
  10.         {
  11.                 p=p->next;
  12.                 printf("%d->",p->data);
  13.         }
  14.         putchar(10);
  15.         return ;
  16. }
复制代码
 尾删:
  1. void Tail_Del(LooplinkPtr h)
  2. {
  3.         if(NULL==h||empt(h))
  4.         {
  5.                 printf("尾删失败\n");
  6.                 return ;
  7.         }
  8.         LooplinkPtr p=h;
  9.         for(int i=0;i<h->len-1;i++)
  10.         {
  11.                 p=p->next;
  12.         }
  13.         LooplinkPtr temp=p->next;
  14.         p->next=h;
  15.         h->len--;
  16.         free(temp);
  17.         temp=NULL;
  18.         return ;
  19. }
复制代码
烧毁:
  1. void My_free(LooplinkPtr h)
  2. {
  3.         if(NULL==h||empt(h))
  4.         {
  5.                 printf("销毁失败\n");
  6.                 return ;
  7.         }
  8.         for(int i=0;i<h->len;i++)
  9.         {
  10.                 Tail_Del(h);
  11.         }
  12.         free(h);
  13.         printf("销毁成功\n");
  14.         return ;
  15. }
复制代码
运行截图:
 

源码:
  1. #include"Looplink.h"
  2. LooplinkPtr caerte()
  3. {
  4.         LooplinkPtr h=(LooplinkPtr)malloc(sizeof(Looplink));
  5.         if(NULL==h)
  6.         {
  7.                 printf("创建失败\n");
  8.                 return NULL;
  9.         }
  10.         h->len=0;
  11.         h->data=0;
  12.         h->next=h;
  13.         printf("创建成功\n");
  14.         return h;
  15. }
  16. int empt(LooplinkPtr h)
  17. {
  18.         if(NULL==h)
  19.         {
  20.                 printf("判空失败\n");
  21.                 return -1;
  22.         }
  23.         return h->next==h;
  24. }
  25. LooplinkPtr node_caerte(DataType a){        LooplinkPtr p=(LooplinkPtr)malloc(sizeof(Looplink));        if(NULL==p)        {                printf("创建失败\n");                return NULL;        }        p->data=a;        return p;}
  26. void Tail_Add(LooplinkPtr h,DataType a)
  27. {
  28.         if(NULL==h)
  29.         {
  30.                 printf("尾插失败\n");
  31.                 return ;
  32.         }
  33.         LooplinkPtr p=node_caerte(a);
  34.         LooplinkPtr p1=h;
  35.         while(p1->next!=h)
  36.         {
  37.                 p1=p1->next;
  38.         }
  39.         p1->next=p;
  40.         p->next=h;
  41.         h->len++;
  42.         return;
  43. }
  44. void show(LooplinkPtr h)
  45. {
  46.         if(NULL==h||empt(h))
  47.         {
  48.                 printf("打印失败\n");
  49.                 return ;
  50.         }
  51.         LooplinkPtr p=h;
  52.         while(p->next!=h)
  53.         {
  54.                 p=p->next;
  55.                 printf("%d->",p->data);
  56.         }
  57.         putchar(10);
  58.         return ;
  59. }
  60. void Tail_Del(LooplinkPtr h)
  61. {
  62.         if(NULL==h||empt(h))
  63.         {
  64.                 printf("尾删失败\n");
  65.                 return ;
  66.         }
  67.         LooplinkPtr p=h;
  68.         for(int i=0;i<h->len-1;i++)
  69.         {
  70.                 p=p->next;
  71.         }
  72.         LooplinkPtr temp=p->next;
  73.         p->next=h;
  74.         h->len--;
  75.         free(temp);
  76.         temp=NULL;
  77.         return ;
  78. }
  79. void My_free(LooplinkPtr h)
  80. {
  81.         if(NULL==h||empt(h))
  82.         {
  83.                 printf("销毁失败\n");
  84.                 return ;
  85.         }
  86.         for(int i=0;i<h->len;i++)
  87.         {
  88.                 Tail_Del(h);
  89.         }
  90.         free(h);
  91.         printf("销毁成功\n");
  92.         return ;
  93. }
复制代码
3】完成双向循环链表的全部操纵 【创建、判空、尾插、遍历、尾删、烧毁】(与单向循环链表相似)
创建:
  1. Loop_double_linkPtr caerte()
  2. {
  3.         Loop_double_linkPtr h=(Loop_double_linkPtr)malloc(sizeof(Loop_double_link));
  4.         if(NULL==h)
  5.         {
  6.                 printf("创建失败\n");
  7.                 return NULL;
  8.         }
  9.         h->len=0;
  10.         h->data=0;
  11.         h->next=h;
  12.         h->proir=h;
  13.         printf("创建成功\n");
  14.         return h;
  15. }
复制代码
判空:
  1. int empt(Loop_double_linkPtr h)
  2. {
  3.         if(NULL==h)
  4.         {
  5.                 printf("判空失败\n");
  6.                 return -1;
  7.         }
  8.         return h->next==h;
  9. }
复制代码
 尾插:
  1. void Tail_Add(Loop_double_linkPtr h,DataType a)
  2. {
  3.         if(NULL==h)
  4.         {
  5.                 printf("尾插失败\n");
  6.                 return ;
  7.         }
  8.         Loop_double_linkPtr p=node_caerte(a);
  9.         Loop_double_linkPtr p1=h;
  10.         while(p1->next!=h)
  11.         {
  12.                 p1=p1->next;
  13.         }
  14.         p->next=h;
  15.         p->proir=p1;
  16.         h->proir=p;
  17.         p1->next=p;
  18.         h->len++;
  19.         return;
  20. }
复制代码
遍历:
  1. void show(Loop_double_linkPtr h)
  2. {
  3.         if(NULL==h||empt(h))
  4.         {
  5.                 printf("打印失败\n");
  6.                 return ;
  7.         }
  8.         Loop_double_linkPtr p=h;
  9.         while(p->next!=h)
  10.         {
  11.                 p=p->next;
  12.                 printf("%d->",p->data);
  13.         }
  14.         putchar(10);
  15.         return ;
  16. }
复制代码
 尾删:
  1. void Tail_Del(Loop_double_linkPtr h)
  2. {
  3.         if(NULL==h||empt(h))
  4.         {
  5.                 printf("尾删失败\n");
  6.                 return ;
  7.         }
  8.         Loop_double_linkPtr p=h;
  9.         for(int i=0;i<h->len-1;i++)
  10.         {
  11.                 p=p->next;
  12.         }
  13.         Loop_double_linkPtr temp=p->next;
  14.         p->next=h;
  15.         h->proir=p;
  16.         h->len--;
  17.         free(temp);
  18.         temp=NULL;
  19.         return ;
  20. }
复制代码
烧毁:
  1. void My_free(Loop_double_linkPtr h)
  2. {
  3.         if(NULL==h||empt(h))
  4.         {
  5.                 printf("销毁失败\n");
  6.                 return ;
  7.         }
  8.         for(int i=0;i<h->len;i++)
  9.         {
  10.                 Tail_Del(h);
  11.         }
  12.         free(h);
  13.         printf("销毁成功\n");
  14.         return ;
  15. }
复制代码
运行截图:

附源码:
  1. #include"Loopdoublelink.h"
  2. Loop_double_linkPtr caerte()
  3. {
  4.         Loop_double_linkPtr h=(Loop_double_linkPtr)malloc(sizeof(Loop_double_link));
  5.         if(NULL==h)
  6.         {
  7.                 printf("创建失败\n");
  8.                 return NULL;
  9.         }
  10.         h->len=0;
  11.         h->data=0;
  12.         h->next=h;
  13.         h->proir=h;
  14.         printf("创建成功\n");
  15.         return h;
  16. }
  17. int empt(Loop_double_linkPtr h)
  18. {
  19.         if(NULL==h)
  20.         {
  21.                 printf("判空失败\n");
  22.                 return -1;
  23.         }
  24.         return h->next==h;
  25. }
  26. Loop_double_linkPtr node_caerte(DataType a){        Loop_double_linkPtr p=(Loop_double_linkPtr)malloc(sizeof(Loop_double_link));        if(NULL==p)        {                printf("创建失败\n");                return NULL;        }        p->data=a;        p->next=NULL;        p->proir=NULL;        return p;}
  27. void Tail_Add(Loop_double_linkPtr h,DataType a)
  28. {
  29.         if(NULL==h)
  30.         {
  31.                 printf("尾插失败\n");
  32.                 return ;
  33.         }
  34.         Loop_double_linkPtr p=node_caerte(a);
  35.         Loop_double_linkPtr p1=h;
  36.         while(p1->next!=h)
  37.         {
  38.                 p1=p1->next;
  39.         }
  40.         p->next=h;
  41.         p->proir=p1;
  42.         h->proir=p;
  43.         p1->next=p;
  44.         h->len++;
  45.         return;
  46. }
  47. void show(Loop_double_linkPtr h)
  48. {
  49.         if(NULL==h||empt(h))
  50.         {
  51.                 printf("打印失败\n");
  52.                 return ;
  53.         }
  54.         Loop_double_linkPtr p=h;
  55.         while(p->next!=h)
  56.         {
  57.                 p=p->next;
  58.                 printf("%d->",p->data);
  59.         }
  60.         putchar(10);
  61.         return ;
  62. }
  63. void Tail_Del(Loop_double_linkPtr h)
  64. {
  65.         if(NULL==h||empt(h))
  66.         {
  67.                 printf("尾删失败\n");
  68.                 return ;
  69.         }
  70.         Loop_double_linkPtr p=h;
  71.         for(int i=0;i<h->len-1;i++)
  72.         {
  73.                 p=p->next;
  74.         }
  75.         Loop_double_linkPtr temp=p->next;
  76.         p->next=h;
  77.         h->proir=p;
  78.         h->len--;
  79.         free(temp);
  80.         temp=NULL;
  81.         return ;
  82. }
  83. void My_free(Loop_double_linkPtr h)
  84. {
  85.         if(NULL==h||empt(h))
  86.         {
  87.                 printf("销毁失败\n");
  88.                 return ;
  89.         }
  90.         for(int i=0;i<h->len;i++)
  91.         {
  92.                 Tail_Del(h);
  93.         }
  94.         free(h);
  95.         printf("销毁成功\n");
  96.         return ;
  97. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表