当前位置:   article > 正文

2月3日作业

2月3日作业

1.编程实现单向循环链表的头插,头删、尾插、尾删

尾插/头插,头删,尾删:

头文件:

  1. #ifndef __HEAD_H_
  2. #define __HEAD_H_
  3. #include<stdio.h>
  4. #include<string.h>
  5. #include<stdlib.h>
  6. enum {FALSE=-1,SUCCESS};
  7. typedef int datatype;
  8. typedef struct node
  9. {
  10. //数据域
  11. datatype data;
  12. //指针域
  13. struct node *next;
  14. }*linklist;
  15. linklist creat();
  16. linklist insert_head(linklist head,datatype element);
  17. void output(linklist head);
  18. linklist insert_rear(linklist head,datatype element);
  19. linklist delete_head(linklist head);
  20. linklist delete_rear(linklist head);
  21. #endif

主函数:

  1. #include"head.h"
  2. int main(int argc, const char *argv[])
  3. {
  4. //头插
  5. linklist head=NULL;
  6. int n;
  7. printf("please enter n:");
  8. scanf("%d",&n);
  9. datatype element;
  10. for(int i=0;i<n;i++)
  11. {
  12. printf("please enter %d element:",i+1);
  13. scanf("%d",&element);
  14. //头插
  15. head=insert_head(head,element);
  16. //尾插
  17. // head=insert_rear(head,element);
  18. }
  19. output(head);
  20. //头删
  21. head=delete_head(head);
  22. output(head);
  23. //尾删
  24. head=delete_rear(head);
  25. output(head);
  26. return 0;
  27. }

自定义函数:

  1. #include"head.h"
  2. int main(int argc, const char *argv[])
  3. {
  4. //头插
  5. linklist head=NULL;
  6. int n;
  7. printf("please enter n:");
  8. scanf("%d",&n);
  9. datatype element;
  10. for(int i=0;i<n;i++)
  11. {
  12. printf("please enter %d element:",i+1);
  13. scanf("%d",&element);
  14. //头插
  15. head=insert_head(head,element);
  16. //尾插
  17. // head=insert_rear(head,element);
  18. }
  19. output(head);
  20. //头删
  21. head=delete_head(head);
  22. output(head);
  23. //尾删
  24. head=delete_rear(head);
  25. output(head);
  26. return 0;
  27. }
  28. ubuntu@ubuntu:~/寒假作业/2.3$ cat test.c
  29. #include"head.h"
  30. linklist creat()
  31. {
  32. linklist head=(linklist)malloc(sizeof(struct node));
  33. if(head==NULL)
  34. return NULL;
  35. head->data=0;
  36. head->next=head;
  37. return head;
  38. }
  39. //头插
  40. linklist insert_head(linklist head,datatype element)
  41. {
  42. linklist s=creat();
  43. s->data=element;
  44. if(head==NULL)
  45. {
  46. head=s;
  47. return head;
  48. }
  49. linklist p=head;
  50. while(p->next!=head)
  51. p=p->next;
  52. s->next=head;
  53. head=s;
  54. p->next=head;
  55. return head;
  56. }
  57. void output(linklist head)
  58. {
  59. linklist s=head;
  60. do
  61. {
  62. printf("%-4d",s->data);
  63. s=s->next;
  64. }while(s!=head);
  65. puts("");
  66. }
  67. //尾插
  68. linklist insert_rear(linklist head,datatype element)
  69. {
  70. linklist s=creat();
  71. s->data=element;
  72. linklist p=head;
  73. if(head==NULL)
  74. {
  75. head=s;
  76. return head;
  77. }
  78. while(p->next!=head)
  79. p=p->next;
  80. p->next=s;
  81. s->next=head;
  82. return head;
  83. }
  84. //头删
  85. linklist delete_head(linklist head)
  86. {
  87. if(head==NULL)
  88. return head;
  89. linklist del=head;
  90. linklist p=head;
  91. while(p->next!=head)
  92. p=p->next;
  93. head=head->next;
  94. p->next=head;
  95. free(del);
  96. del=NULL;
  97. return head;
  98. }
  99. //尾删
  100. linklist delete_rear(linklist head)
  101. {
  102. if(head==NULL)
  103. return head;
  104. linklist p=head;
  105. if(head->next==head)
  106. {
  107. free(head);
  108. head=NULL;
  109. return head;
  110. }
  111. while(p->next->next!=head)
  112. p=p->next;
  113. linklist del=p->next;
  114. p->next=head;
  115. free(del);
  116. del=NULL;
  117. return head;
  118. }

2.编程实现单向循环链表约瑟夫环
约瑟夫环:用循环链表编程实现约瑟夫问题
n个人围成一圈,从某人开始报数1,2,.., m,数到m的人出圈,然后从出圈的下一个人(m+1)开始重复此过程
直到 全部人出圈,于是得到一个出圈人员的新序列
如当n=8,m=4时,若从第一个位置数起,则所得到的新的序列 为4,8,5,2,1,3,7,6

3.编程实现单向循环链表的排序 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/67953
推荐阅读
相关标签
  

闽ICP备14008679号