Appearance
按数据查找
其实就是递归做比较,当一个满足的时候取得坐标,类似 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) 可以完成按数据删除