• 国庆假期作业day2


    作业:创建一个双向链表,将26个英文字母通过头插的方式插入到链表中,通过尾删的方式将数据读取出来并删除

    1. #ifndef _TEXT_H
    2. #define _TEXT_H
    3. #include
    4. typedef int datatype;
    5. typedef struct dblist
    6. {
    7. union
    8. {
    9. datatype data;//数据域
    10. int len;
    11. };
    12. struct dblist *pre;//指针域
    13. struct dblist *next;
    14. }Node,*pdblist;
    15. //创建头结点
    16. pdblist create_head();
    17. //创建结点
    18. pdblist create_node(datatype data);
    19. //头插
    20. int insert_head(pdblist H,datatype data);
    21. //输出双向链表
    22. int out_dblist(pdblist H);
    23. //尾删
    24. int dele_tail(pdblist H);
    25. #endif
    1. #include "text.h"
    2. //创建头结点
    3. pdblist create_head()
    4. {
    5. //在堆区申请一个结构体的空间
    6. pdblist H = (pdblist)malloc(sizeof(Node));
    7. if(H==NULL)
    8. {
    9. printf("申请空间失败\n");
    10. return NULL;
    11. }
    12. H->len=0;
    13. H->pre=NULL;
    14. H->next=NULL;
    15. return H;
    16. }
    17. //创建结点
    18. pdblist create_node(datatype data)
    19. {
    20. pdblist new = (pdblist)malloc(sizeof(Node));
    21. if(new==NULL)
    22. {
    23. printf("申请空间失败\n");
    24. return NULL;
    25. }
    26. new->data=data;
    27. new->pre=NULL; //新结点的前驱指向NULL
    28. new->next=NULL; //新结点的后继指向NULL
    29. return new;
    30. }
    31. //头插
    32. int insert_head(pdblist H,datatype data)
    33. {
    34. if(H==NULL)
    35. {
    36. printf("入参为空\n");
    37. return -1;
    38. }
    39. //先创建新结点
    40. pdblist new = create_node(data);
    41. new->next = H->next;
    42. if(H->next!=NULL)
    43. {
    44. H->next->pre=new;
    45. }
    46. new->pre=H;
    47. H->next=new;
    48. H->len++;
    49. return 0;
    50. }
    51. //输出双向链表
    52. int out_dblist(pdblist H)
    53. {
    54. if(H==NULL)
    55. {
    56. printf("入参为空\n");
    57. return -1;
    58. }
    59. if(H->next==NULL)
    60. {
    61. printf("双向链表为空\n");
    62. return -2;
    63. }
    64. pdblist p = H->next; //不让H中的len参与输出
    65. while(p!=NULL)
    66. {
    67. printf("%c->",(char)p->data);
    68. p = p->next;
    69. }
    70. printf("NULL\n");
    71. return 0;
    72. }
    73. //尾删
    74. int dele_tail(pdblist H)
    75. {
    76. if(H==NULL)
    77. {
    78. printf("入参为空\n");
    79. return -1;
    80. }
    81. if(H->next==NULL)
    82. {
    83. printf("双向链表为空\n");
    84. return -2;
    85. }
    86. pdblist p = H;
    87. //找最后一个结点
    88. while(p->next!=NULL)
    89. {
    90. p = p->next;
    91. }
    92. p->pre->next = p->next; //让倒数第二个结点的next指向NULL
    93. //p->pre->next = NULL;
    94. free(p);
    95. p=NULL;
    96. H->len--;
    97. return 0;
    98. }
    1. #include"text.h"
    2. int main()
    3. {
    4. //创建头结点
    5. pdblist H=create_head();
    6. //调用头插函数
    7. for(int i=65;i<=90;i++)
    8. {
    9. insert_head(H,i);
    10. }
    11. out_dblist(H);
    12. //调用尾删
    13. for(int i=0;i<26;i++)
    14. {
    15. dele_tail(H);
    16. }
    17. out_dblist(H);
    18. return 0;
    19. }

     

     

    效果图: 

     

  • 相关阅读:
    微服务09-Sentinel的入门
    投资自己,成就未来——人大女王金融硕士助力您成为金融领域的佼佼者
    MySql 查询优化
    Spring Cloud--@RefreshScope动态刷新的注意事项
    面试算法题之暴力求解
    STM32F103C8T6第三天:pwm、sg90、超声波、距离感应按键开盖震动开盖蜂鸣器
    Prompt提示词——什么是CRISPE框架?QCIPSPE框架?
    Java 面试全解析:核心知识点与典型面试题
    Vue入门介绍
    高德地图 计算两个点之间距离
  • 原文地址:https://blog.csdn.net/m0_69894626/article/details/133464528