有序链表顺序搜索算法实现 - SeqSearch 函数详解
有序链表顺序搜索算法实现 - SeqSearch 函数详解
假设有一个有序表用单链表表示,其结点和链表结构体定义如下:
typedef struct snode{
KeyType key;
DataType data;
struct snode* link;
}SNode;
typedef struct linkedlist{
SNode * first;
}LinkedList;
请设计一个方法 SeqSearch,实现对有序表的顺序搜索。若搜索成功则 SeqSearch 返回 TRUE,否则返回 FALSE。
BOOL SeqSearch(LinkedList* list, KeyType key)
{
SNode* p = list->first;
while(p != NULL && p->key < key)
{
p = p->link;
}
if(p == NULL || p->key > key)
{
return FALSE;
}
else
{
return TRUE;
}
}
**注:**本题假设有序表按照关键字升序排列。
代码解释:
- 初始化指针:
SNode* p = list->first;将指针p指向链表的头结点first。 - 循环遍历:
while(p != NULL && p->key < key)循环遍历链表,直到遇到以下两种情况:p == NULL: 指针p指向空结点,表示链表中不存在目标关键字。p->key >= key: 指针p所指结点的关键字大于或等于目标关键字,此时退出循环。
- 判断搜索结果:
if(p == NULL || p->key > key)检查退出循环的原因:p == NULL: 目标关键字不存在,返回FALSE。p->key > key: 目标关键字不存在,返回FALSE。- 否则: 目标关键字存在,返回
TRUE。
总结: 该 SeqSearch 函数通过顺序遍历链表的方式查找目标关键字,并根据遍历结果返回 TRUE 或 FALSE 表示搜索成功与否。
优化建议:
- 由于链表是有序的,可以考虑使用二分查找算法来提高搜索效率。
- 可以添加错误处理机制,例如当链表为空时,直接返回
FALSE。 - 可以根据实际需求添加其他功能,例如返回找到的目标结点指针。
原文地址: https://www.cveoy.top/t/topic/nKr7 著作权归作者所有。请勿转载和采集!