C中链表的搜索算法

时间:2017-11-04 17:41:47

标签: c algorithm search

我刚刚开始了一个学校项目,那个项目我需要使用Linked List。另外,我需要搜索链接列表中的一些数据。

我一直在研究搜索算法。 我看了看:

Binary Search(递归的) - 看起来难以实现 -

Sequential Search - 复杂性已经是O(N)

Exponential Search - 基于二进制搜索 -

我可以以最有效的方式使用哪种算法?此外,搜索算法的复杂性必须低于 O(N)。我愿意接受任何建议

我的作业详情: 他们希望我们在控制台上编写基本的facebook。它会做添加朋友,阻止朋友,喜欢那些东西。

将链接列表并包含姓名,姓氏,性别和出生日期。此外,这些数据将来自文件。在将数据加载到链接列表之前,它将被排序,然后将加载到链接列表。

作业有5个主干功能:插入(基本上将人员添加到链接列表并对其进行排序),搜索(搜索特定人员并说复杂性必须为O(logN) ),打印阻止人并打印被屏蔽的人

编辑: 我认为这是一种二元搜索:

我将二进制搜索称为searchFriends(FList, 0, FList->size - 1);

searchFriends内部:

void searchFriends(List FList, int l, int r)
{
    if (r - 1 >= 1)
    {
        int middleItem = l + (r - 1) / 2;
        struct Node* temp = FList->head->next;
        int i = 0;
        while (i < middleItem)
        {
            temp = temp->next;
            i++;
        }
        if (strcmp(temp->Name, "Name") == 0)
        {
            printf("\nName\t\tSurname\t\tGender\t\tBirth Year\n");
            printf("%-15s %-15s %-15c %s\n", temp->Name, temp->Surname, temp->Gender, temp->DateofBirth);
        }
        if (strcmp(temp->Name, "Name") > 0)
            return searchFriends(FList, l, middleItem - 1);

        return searchFriends(FList, middleItem + 1, r);
}

}

1 个答案:

答案 0 :(得分:3)

请注意,标准链表是随机访问。遍历此类列表的唯一方法是线性的。

因此,不可能在链表上使用二进制搜索等随机访问算法。您必须执行顺序==线性搜索,最坏情况复杂度为O(n)。