Skip to content
On this page

数据结构_单向链表_数据查找


标签:算法/list  

按数据查找

其实就是递归做比较,当一个满足的时候取得坐标,类似 js 里的 array.prototype.indexOf() 函数。

代码实现

c
int IndexOf(linkedlist l, datatype key)
{
	if (l == NULL || l->len == 0)
		return -1;
	linkedlist p = l->next;
	for (int i = 0; i < l->len; i++)
	{
		if (p->data == key)          // comp
			return i;
		p = p->next;
	}
	return -1;
}

这段代码非常简单,和读取操作基本差不多。但这里想要讨论是是我注释 comp 的这一行,因为我的代码里 datatype 是 int 的别名,可以直接用 == 进行比较,如果 datatype 是字符串、结构体,恐怕就不能这么简单做比较了,字符串需要使用strcmp() 对吧,结构体的话需要自行从内部比较。所以想要代码的可移植性高,最好学习stdlib.h的qsort()函数传入一个 comp 函数作为回调函数。当然这里只是学习数据结构,不是用于生产的代码就不让它复杂化了。

另外因为坐标和状态码都是整型函数,所以不用像读取那样传入一个指针接收。没有找到返回-1,找到了就返回下标,很多语言的标准库都是这么设计的函数的,例如 js 的 Array.prototype.indexOf() - JavaScript | MDN (mozilla.org)

按数据更新

利用 IndexOf(linkedlist l, datatype key) 搭配 UpdateElement(linkedlist l, int i, datatype e) 可以完成按数据更新

按数据删除

利用 IndexOf(linkedlist l, datatype key) 搭配 DeleteElement(linkedlist l, int i, datatype *e) 可以完成按数据删除

Last updated: