当前位置:   article > 正文

C语言单链表的算法之遍历节点_c语言链表如何从首节点一直遍历到第二节

c语言链表如何从首节点一直遍历到第二节

一:什么是遍历

(1)遍历就是把单链表中的各个节点挨个拿出来,就叫遍历

(2)便利的要点:一是不能遗漏,二是不能重复追求效率

二:如何遍历单链表

        (1)分析一个数据结构如何遍历,关键是分析这个数据结构本身的特点。然后根据本身特点来制定它的遍历算法

        (2)单链表的特点就是由很多个节点组成,头指针+头节点为整个链表的起始,最后一个节点的特征是它内部的pnext指针的值为null。从起始到结尾中间由各个节点内部的pnext指针来挂接。由起始到结尾的路劲只有一条,这个特点就决定了它的遍历算法

        (3)遍历方法:从头指针+头节点开始,顺着链表挂接指针依次访问链表的各个节点,取出这个节点的数据,然后再往下一个节点,直到最后一个数据结束返回

三:编程实战

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. //构建一个链表节点
  5. struct node
  6. {
  7. int datas;
  8. struct node *pNEXT;
  9. };
  10. /****************************************
  11. 函数名:create
  12. 作用:创建一个链表节点
  13. 返回值:p 指针,指针指向本函数创建的一个节点的首地址
  14. 参数:
  15. ****************************************/
  16. struct node *create(int a)
  17. {
  18. struct node *p = (struct node *)malloc(sizeof(struct node));
  19. if(NULL == p)
  20. {
  21. printf("malloc error!\n");
  22. return NULL;
  23. }
  24. memset(p,0,sizeof(struct node));
  25. //bzero(p,sizeof(struct node));
  26. p->datas = a;
  27. p->pNEXT = NULL;
  28. return p;
  29. }
  30. /****************************************
  31. 函数名:insert_tail
  32. 作用:从链表尾部插入节点
  33. 返回值:无
  34. 参数:phead:链表的头指针 new:插入的新节点指针
  35. ****************************************/
  36. void insert_tail(struct node *phead,struct node *new)
  37. {
  38. struct node *p = phead;
  39. int cat = 0;
  40. while(NULL != p->pNEXT)
  41. {
  42. p = p->pNEXT;
  43. cat++;
  44. }
  45. p->pNEXT = new;
  46. phead->datas = cat +1;
  47. }
  48. /****************************************
  49. 函数名:insert_head
  50. 作用:从链表头部插入节点
  51. 返回值:无
  52. 参数:phead:链表的头指针 new:插入的新节点指针
  53. ****************************************/
  54. void insert_head(struct node *head,struct node *new)
  55. {
  56. new->pNEXT = head->pNEXT;
  57. head->pNEXT = new;
  58. head->datas += 1;
  59. }
  60. /****************************************
  61. 函数名:ergodic
  62. 作用:遍历链表的各个节点
  63. 返回值:无
  64. 参数:ph:链表的头指针
  65. ****************************************/
  66. void ergodic(struct node *ph)
  67. {
  68. struct node *p = ph; //创建临时指针变量
  69. int cat = 0; //临时计数
  70. printf("datas number is a: %d\n",p->datas); //输出打印链表节点个数
  71. while(NULL != p->pNEXT) //判断pnext是否指向NULL
  72. {
  73. cat++; //循环一次计数加一
  74. printf("datas number is :%d\n",cat); //输出当前是第几个节点
  75. printf("datas is: %d\n",p->pNEXT->datas); //输出当前节点数据区数据
  76. p = p->pNEXT; //临时指针变量指向下一个节点
  77. }
  78. }
  79. int main(void)
  80. {
  81. struct node *phead = create(0);
  82. insert_tail(phead,create(1));
  83. insert_tail(phead,create(2));
  84. insert_tail(phead,create(3));
  85. ergodic(phead);
  86. return 0;
  87. }

运行结果:

 

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

闽ICP备14008679号