• 2.23作业


    1.自己实现单向循环链表的功能

    1. //loop_list.c
    2. #include"loop_list.h"
    3. //创建单向循环链表
    4. loop_p create_head()
    5. {
    6. loop_p H=(loop_p)malloc(sizeof(loop_list));
    7. if(H==NULL)
    8. {
    9. printf("空间申请失败\n");
    10. return NULL;
    11. }
    12. H->len=0;
    13. H->next=H;
    14. return H;
    15. }
    16. //创建结点
    17. loop_p create_node(datatype data)
    18. {
    19. loop_p new=(loop_p)malloc(sizeof(loop_list));
    20. if(new==NULL)
    21. {
    22. printf("空间申请失败\n");
    23. return NULL;
    24. }
    25. new->data = data;
    26. return new;
    27. }
    28. //输出
    29. void out_put_loop(loop_p H)
    30. {
    31. if(H==NULL)
    32. {
    33. printf("入参为空,请检查\n");
    34. return;
    35. }
    36. loop_p p=H->next;
    37. while(p!=H)
    38. {
    39. printf("%d->",p->data);
    40. p=p->next;
    41. }
    42. printf("%c",'H');
    43. putchar(10);
    44. }
    45. //头插
    46. void insert_head(loop_p H,datatype data)
    47. {
    48. if(H==NULL)
    49. {
    50. printf("入参为空,请检查\n");
    51. return;
    52. }
    53. loop_p new=create_node(data);
    54. new->next=H->next;
    55. H->next=new;
    56. H->len++;
    57. }
    58. //按位置插入
    59. void insert_pos(loop_p H,datatype data,int pos)
    60. {
    61. if(H==NULL)
    62. {
    63. printf("入参为空,请检查\n");
    64. return;
    65. }
    66. if(pos<=0||pos>H->len+1)
    67. {
    68. printf("位置不合理\n");
    69. return;
    70. }
    71. loop_p p=H;
    72. for(int i=0;i-1;i++)
    73. {
    74. p=p->next;
    75. }
    76. loop_p new=create_node(data);
    77. new->next=p->next;
    78. p->next=new;
    79. H->len++;
    80. }
    81. //尾删
    82. void del_tail(loop_p H)
    83. {
    84. if(H==NULL)
    85. {
    86. printf("入参为空,请检查\n");
    87. return;
    88. }
    89. loop_p p=H;
    90. while(p->next->next!=H)
    91. {
    92. p=p->next;
    93. }
    94. loop_p del=p->next;
    95. p->next=p->next->next;
    96. free(del);
    97. H->len--;
    98. }
    99. //按位置删除
    100. void del_pos(loop_p H,int pos)
    101. {
    102. if(H==NULL)
    103. {
    104. printf("入参为空,请检查\n");
    105. return;
    106. }
    107. if(pos<=0||pos>H->len)
    108. {
    109. printf("位置不合理\n");
    110. return;
    111. }
    112. loop_p p=H;
    113. for(int i=0;i-1;i++)
    114. {
    115. p=p->next;
    116. }
    117. loop_p del=p->next;
    118. p->next = p->next->next;
    119. free(del);
    120. H->len--;
    121. }
    1. //loop_list.h
    2. #ifndef __LOOP_LIST_H__
    3. #define __LOOP_LIST_H__
    4. #include
    5. #include
    6. #include
    7. typedef int datatype;
    8. typedef struct loop_list
    9. {
    10. union
    11. {
    12. int len;
    13. datatype data;
    14. };
    15. struct loop_list *next;
    16. }loop_list,*loop_p;
    17. //创建单向循环链表
    18. loop_p create_head();
    19. //创建结点
    20. loop_p create_node(datatype data);
    21. //输出
    22. void out_put_loop(loop_p H);
    23. //头插
    24. void insert_head(loop_p H,datatype data);
    25. //按位置插入
    26. void insert_pos(loop_p H,datatype data,int pos);
    27. //尾删
    28. void del_tail(loop_p H);
    29. //按位置删除
    30. void del_pos(loop_p H,int pos);
    31. #endif
    1. //main.c
    2. #include"loop_list.h"
    3. int main(int argc, const char *argv[])
    4. {
    5. loop_p H=create_head();
    6. insert_head(H,89);
    7. insert_head(H,55);
    8. insert_head(H,7);
    9. out_put_loop(H);
    10. insert_pos(H,12,2);
    11. out_put_loop(H);
    12. del_tail(H);
    13. out_put_loop(H);
    14. del_pos(H,1);
    15. out_put_loop(H);
    16. return 0;
    17. }

    2.复习前面顺序表和链表的代码,重写链表逆置函数

    1. void overturn_link(link_p H)
    2. {
    3. if(H==NULL)
    4. {
    5. printf("入参为空,请检查\n");
    6. return;
    7. }
    8. if(link_empty(H))
    9. {
    10. printf("链表为空\n");
    11. return;
    12. }
    13. if(H->next->next==NULL)
    14. {
    15. printf("表中只有一个元素,无需翻转\n");
    16. return;
    17. }
    18. link_p p=H->next->next;
    19. H->next->next=NULL;
    20. link_p q=p->next;
    21. while(p!=NULL)
    22. {
    23. p->next=H->next;
    24. H->next=p;
    25. p=q;
    26. if(q!=NULL)
    27. {
    28. q=q->next;
    29. }
    30. }
    31. }

  • 相关阅读:
    java计算机毕业设计基于安卓Android/微信小程序的汽车租赁小程序-app
    省重点实验室成果转化:24h在线的专业数字朋友,不用欠人情的网上解答神器~
    okhttp添加公共参数
    python pdf文件转图片
    Postman下发流表至Opendaylight
    西门子S7-200 SMART(6ES7 288-1ST40-0AA0)相关与晨控智能CK-FR08-E00关于modbus tcp 通信配置指南
    QQ邮箱发送验证码源码/API+HTML源码/支持API接口、自定义地址和内容/简单易用
    【Linux】基础IO(万字详解) —— 系统文件IO | 文件描述符fd | 重定向原理
    VScode 使用ESlint检查代码
    MTK8183/MT8183安卓4G核心板_联发科安卓手机开发板主板方案定制
  • 原文地址:https://blog.csdn.net/2201_75885428/article/details/136263045