当前位置:   article > 正文

单链表的创建、初始化、插入、删除 、输出、求表长、清空、查找操作_linklist*head

linklist*head
  1. //单链表的创建、初始化、插入、删除 、输出、求表长、清空、查找操作
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<malloc.h>
  5. #define N 5
  6. #define ERROR 0
  7. #define OK 1
  8. typedef struct node{ //定义节点
  9. int data;
  10. struct node *next;
  11. }linklist;
  12. linklist *Initlist() //初始化单链表
  13. {
  14. linklist *head;
  15. head=(linklist*)malloc(sizeof(linklist));
  16. head->next=NULL;
  17. return head;
  18. }
  19. linklist *CreateList(int n) //用尾插法创建单链表
  20. {
  21. int i;
  22. linklist *head,*p,*r;
  23. head=(linklist*)malloc(sizeof(linklist));
  24. head->next=NULL;
  25. r=head;
  26. for(i=1;i<=n;i++)
  27. {
  28. p=(linklist*)malloc(sizeof(linklist));
  29. p->next=NULL;
  30. scanf("%d",&p->data);
  31. r->next=p;
  32. r=r->next;
  33. }
  34. return head;
  35. }
  36. void printlist(linklist *head) //输出链表
  37. {
  38. linklist *p;
  39. int i=1;
  40. p=head->next;
  41. while(p!=NULL)
  42. {
  43. printf("%d:",i);
  44. printf("%d\n",p->data);
  45. p=p->next;
  46. i++;
  47. }
  48. printf("\n");
  49. }
  50. void listlength(linklist *head) //求表长
  51. {
  52. int count=0;
  53. linklist *p;
  54. p=head->next;
  55. while(p!=NULL)
  56. {
  57. count++;
  58. p=p->next;
  59. }
  60. printf("链表的长度为%d\n",count);
  61. }
  62. int insertlist(linklist *head,int i,int x) //在第i个位置上插入新的元素
  63. {
  64. int j;
  65. linklist *p,*s;
  66. p=head;
  67. j=0;
  68. while(p!=NULL&&j<i-1)
  69. {
  70. p=p->next;
  71. j++;
  72. }
  73. if(p==NULL||i<1) return ERROR;
  74. s=(linklist*)malloc(sizeof(linklist));
  75. s->data=x;
  76. s->next=p->next;
  77. p->next=s;
  78. return OK;
  79. }
  80. int deletelist(linklist *head,int i) //删除i位置上面的元素
  81. {
  82. int j;
  83. linklist *p,*q;
  84. p=head;j=0;
  85. while(p!=NULL&&j<i-1)
  86. {
  87. p=p->next;
  88. j++;
  89. }
  90. if(p==NULL||i<1) return ERROR;
  91. q=p->next;
  92. p->next=q->next;
  93. free(q);
  94. return OK;
  95. }
  96. int locatelink(linklist *head,int x) //求元素x在链表的哪个位置
  97. {
  98. linklist *p;
  99. int j;
  100. p=head->next;
  101. j=1;
  102. while(p!=NULL&&p->data!=x)
  103. {
  104. p=p->next;
  105. j++;
  106. }
  107. if(p==NULL) return ERROR;
  108. else return j;
  109. }
  110. int clearlist(linklist *head) //清空链表
  111. {
  112. linklist *p,*q;
  113. p=head->next;
  114. head->next=NULL;
  115. while(p!=NULL)
  116. {
  117. q=p;
  118. p=p->next;
  119. free(q);
  120. }
  121. return 1;
  122. }
  123. int main()
  124. {
  125. linklist *head;
  126. head=CreateList(5); //输入的元素为 1 3 5 7 9
  127. printlist(head);
  128. listlength(head);
  129. int i;
  130. i=locatelink(head,5);
  131. printf("5的位置为%d\n",i);
  132. insertlist(head,6,10);
  133. printlist(head);
  134. printf("\n");
  135. deletelist(head,5);
  136. printlist(head);
  137. return 0;
  138. }


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

闽ICP备14008679号