当前位置:首页 > 经验 >

单链表查找特定值(单链表的查找并计数)

来源:原点资讯(www.yd166.com)时间:2022-11-04 00:04:49作者:YD166手机阅读>>

数组中取值可以根据下标获取指定的值,但链表不行,链表中逻辑相邻的元素,在物理上不一定是相邻的。链表中取值只能从首元结点开始,通过指针域依次访问。

单链表取值的算法分析如下

(1) 按所取元素的位置,从首元结点开始,遍历整个链表。

(2) 设置计数器,遍历链表时,计数器自增,当计数器值与所取值的序号相同时,结束循环

(3) 输出所取的值。

算法的思想大致如上述描述,函数的实现考虑返回值和形参。

(1) 返回值,对于取数而言,存在已获取值和未获取值,所以可以定义如下:

#define OK 1 #define ERROR 0 #define VOERFLOW -2 typedef int Status;

函数类型为int类型,成功取值返回1,未获取值返回0。

(2) 函数形参,需要对链表进行取值,所以首先要传入链表,然后需要考虑具体取哪个序号的值,最后将所取的值存在哪?按上述考虑,可以将函数声明如下

Status GetElem(LinkList L, int i, int &e)

其中LinkList L是需要取值的链表,i是取值的序号,&e采用引用的方式,将值进行存储。

具体实现算法时,参考下图

单链表查找特定值,单链表的查找并计数(1)

(1) 定义指针变量p,指向首元结点,因为链表取值,遍历链表时只需要从首元结点开始遍历。

LinkList p; p = L->next;

p是指针变量,结构体指针类型,首元结点的地址由头指针L获取,即L->next

(2) 将指针p移动到所取值的结点。这时候需要使用循环,链表结点数量不确定,所以循环次数不确定,使用while循环。函数传参时,传输需要取值的需要,所以在循环过程中设置计数器j,只要i和j的值相等时,结束循环,但其中需要再考虑结点不为空。

while((p != NULL) && (j<i)){ p = p->next; j ; }

只要p不为空,且j<i时就会一直循环,当j=i时结束循环。

(3) 如果结点p为空,或者计数器的值大于传入的序号i值,那返回error

(4) 循环结束,此时计数器的值等于传入的序号i值,所以此时指针p指向了所取数值的结点,只要获取此结点的数据域即可。

e = p->data;

完整的代码参考如下

Status GetElem(LinkList L, int i, int &e){ int j = 1; LinkList p; p = L->next; while((p != NULL) && (j<i)){ p = p->next; j ; } if(!p || j>i) return ERROR; e = p->data; return OK; }

栏目热文

如何确认链表节点(链表如何判断是否为尾节点)

如何确认链表节点(链表如何判断是否为尾节点)

数据结构有顺序存储和链式存储两种存储方式。顺序存储的数组可以使用下标随机访问,但插入操作比较麻烦,且需要整块的内存,另外...

2022-11-04 00:43:50查看全文 >>

单链表如何判断是不是尾节点(单链表最后一个节点判断条件)

单链表如何判断是不是尾节点(单链表最后一个节点判断条件)

数组与链表是数据结构最基础的两种,其他的诸如hash表、树、队列、栈等都是基于这两种数据结构实现,上面两篇文章介绍了数组...

2022-11-04 00:06:53查看全文 >>

怎么找单链表节点(如何确认链表节点)

怎么找单链表节点(如何确认链表节点)

福哥答案2020-11-03:1.输入链表头节点,奇数长度返回中点,偶数长度返回上中点 。1.1.快慢指针。1.2.单指...

2022-11-04 00:41:37查看全文 >>

单链表各个节点的关系(单链表的中间节点)

单链表各个节点的关系(单链表的中间节点)

一:相关概念(1)什么是链表官方定义:链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接...

2022-11-04 00:27:00查看全文 >>

单链表找中间的节点(在链表中查找节点)

单链表找中间的节点(在链表中查找节点)

想法:返回单链表的中间节点:采用双指针方法,慢指针走一步,快指针走2步,当快指针走到头,那么慢指针所在的位置就是链表的中...

2022-11-04 00:29:10查看全文 >>

单链表中间节点(单链表中各节点是否连续)

单链表中间节点(单链表中各节点是否连续)

单链表是一种线性数据结构,与顺序表占据一段连续的内存空间不同,链表是用一组地址任意的存储单元来存储数据,每个存储单元分散...

2022-11-04 00:25:29查看全文 >>

单链表如何查找中间结点(如何求链表中的中间节点)

单链表如何查找中间结点(如何求链表中的中间节点)

部分数据结构请看常见Java问题及笔试题(二十一),这里只列出主要方法与测试用例!!!寻找单链表的中间节点,最简单的思路...

2022-11-04 00:14:56查看全文 >>

单链表怎么找到上一个节点(链表的节点图解)

单链表怎么找到上一个节点(链表的节点图解)

给定一个单链表,判断其中是否有环,在网上搜集了一些资料,然后总结一下大概可以涉及到的问题,以及相应的解法。首先,关于单链...

2022-11-04 00:32:16查看全文 >>

十字链表简单理解(十字链表的节点结构)

十字链表简单理解(十字链表的节点结构)

前面之前的数据结构知识,介绍了矩阵的三元组表示法,当然之前只介绍矩阵运算中的转置,至于乘法运算以及加减运算,之前没有介绍...

2022-11-04 00:17:04查看全文 >>

单链表增加节点(单链表删除节点)

单链表增加节点(单链表删除节点)

单链表中增加节点,除了增加结点本身的数据域和指针域,还需要更改前、后结点的指针域。一个简单的实例代码:#include ...

2022-11-04 00:20:14查看全文 >>

文档排行