鱼C论坛

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

[学习笔记] 双向循环链表、正负数、输出

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

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

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

x
本帖最后由 奥普瓯江 于 2021-10-20 18:19 编辑

原理:

注意:负数,补码转正数,

代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSIZE 26

  4. typedef struct Like
  5. {
  6.     char data;
  7.     struct Like *prior;
  8.     struct Like *next;
  9. }Like, *Likes;


  10. void InitList(Likes *E);        //初始化双向链表并创建初始节点
  11. void GetList(Likes *E);         //创建26节点并向其中填入字母
  12. void PutList(Like *E);
  13. void PutList(Like *E)
  14. {
  15.     Like *temp = E->next, *temps;
  16.     int i;

  17.     scanf("%d", &i);
  18.     getchar();

  19.     if(i > 0)
  20.     {
  21.         for(int j = 0; j < i; j++)
  22.         {
  23.             temp = temp->next;
  24.         }
  25.         temps = temp;
  26.         do
  27.         {
  28.             printf("%c", temp->data);
  29.             temp = temp->next;

  30.         }while(temp != temps);

  31.     }
  32.     else if(i < 0)
  33.     {
  34.         i = abs(i);                        //负数转正数
  35.         for(int j = 0; j <= i; j++)
  36.         {
  37.             temp = temp->prior;
  38.         }
  39.          temps = temp;

  40.         do
  41.         {
  42.             temp = temp->next;
  43.             printf("%c", temp->data);
  44.         }while(temp != temps);

  45.     }
  46.     //恢复指针



  47. }

  48. void GetList(Likes *E)
  49. {
  50.     Like *temp, *tail;

  51.     for(int i = 0; i < MAXSIZE; i++)
  52.     {
  53.         temp = (Likes )malloc(sizeof(Like ));
  54.         temp->data = i + 65;

  55.         temp->next = (*E)->next;
  56.         (*E)->prior = temp;
  57.         (*E)->next->prior = temp;

  58.         if((*E)->next == *E)
  59.         {
  60.             (*E)->next = temp;
  61.             temp->prior = temp;
  62.         }
  63.         else
  64.         {
  65.             temp->prior = tail;
  66.             tail->next = temp;
  67.         }
  68.         tail = temp;
  69.     }
  70. }
  71. void InitList(Likes *E)         //初始化双向链表并创建初始节点
  72. {
  73.     if(*E != NULL)
  74.     {
  75.         Like *temp = (*E)->next, *temps;
  76.         do
  77.         {
  78.             temps = temp;
  79.             temp = temp->next;
  80.             free(temps);
  81.         }while(temp == NULL);

  82.     }
  83.     else
  84.     {
  85.         *E = (Likes )malloc(sizeof(Like ));
  86.     }
  87.     (*E)->next = *E;
  88.     (*E)->prior = *E;

  89. }
  90. int main()
  91. {
  92.     Like *F = NULL;
  93.     InitList(&F);
  94.     GetList(&F);
  95.     PutList(F);


  96.     return 0;
  97. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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