赞
踩
(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;
-
-
- }
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。