欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > C语言单链表的算法之遍历节点

C语言单链表的算法之遍历节点

2024/10/25 11:23:41 来源:https://blog.csdn.net/tmk1234567890/article/details/140019804  浏览:    关键词:C语言单链表的算法之遍历节点

一:什么是遍历

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

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

二:如何遍历单链表

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

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

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

三:编程实战

#include <stdio.h>
#include <string.h>
#include <stdlib.h>//构建一个链表节点
struct node
{int datas;struct node *pNEXT;};/****************************************
函数名:create
作用:创建一个链表节点
返回值:p 指针,指针指向本函数创建的一个节点的首地址
参数:
****************************************/
struct node *create(int a)
{struct node *p = (struct node *)malloc(sizeof(struct node));if(NULL == p){printf("malloc error!\n");return NULL;}memset(p,0,sizeof(struct node));  //bzero(p,sizeof(struct node));p->datas = a;p->pNEXT = NULL;return p;}/****************************************
函数名:insert_tail
作用:从链表尾部插入节点
返回值:无
参数:phead:链表的头指针 new:插入的新节点指针
****************************************/
void insert_tail(struct node *phead,struct node *new)
{struct node *p = phead;int cat = 0;while(NULL !=  p->pNEXT){p = p->pNEXT;cat++;}p->pNEXT = new;phead->datas = cat +1;}/****************************************
函数名:insert_head
作用:从链表头部插入节点
返回值:无
参数:phead:链表的头指针 new:插入的新节点指针
****************************************/
void insert_head(struct node *head,struct node *new)
{new->pNEXT =  head->pNEXT;head->pNEXT = new;head->datas += 1;}/****************************************
函数名:ergodic
作用:遍历链表的各个节点
返回值:无
参数:ph:链表的头指针
****************************************/
void ergodic(struct node *ph)
{struct node *p = ph;        //创建临时指针变量int cat = 0;                //临时计数printf("datas number is a: %d\n",p->datas);    //输出打印链表节点个数while(NULL !=  p->pNEXT)                       //判断pnext是否指向NULL {cat++;                                 //循环一次计数加一printf("datas number is :%d\n",cat);   //输出当前是第几个节点printf("datas is: %d\n",p->pNEXT->datas);  //输出当前节点数据区数据   p = p->pNEXT;                              //临时指针变量指向下一个节点}}int main(void)
{struct node *phead = create(0);insert_tail(phead,create(1));insert_tail(phead,create(2));insert_tail(phead,create(3));ergodic(phead);        return 0;}

运行结果:

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com