Arrays 使用数组和链表对列表进行线性和二进制搜索

Arrays 使用数组和链表对列表进行线性和二进制搜索,arrays,data-structures,linked-list,binary-search,linear-search,Arrays,Data Structures,Linked List,Binary Search,Linear Search,到目前为止,在数据结构中,我已经研究了使用数组的列表和使用指针的链表(单、双和循环)。大纲中的下一个内容是线性和二进制搜索。我找到了列表和链表的线性搜索示例。对于二进制搜索,我在使用数组的列表中找到了一个示例,但对于链表(单、双和循环)没有示例。 1) 我想知道二进制搜索不能应用于任何类型的链表吗? 2) 在单链表的线性搜索中,我也看到了这段代码 if (ptr->data = = SearchElement){ indexPtr = ptr; return indexPtr;} 在这种

到目前为止,在数据结构中,我已经研究了使用数组的列表和使用指针的链表(单、双和循环)。大纲中的下一个内容是线性和二进制搜索。我找到了列表和链表的线性搜索示例。对于二进制搜索,我在使用数组的列表中找到了一个示例,但对于链表(单、双和循环)没有示例。
1) 我想知道二进制搜索不能应用于任何类型的链表吗?
2) 在单链表的线性搜索中,我也看到了这段代码

if (ptr->data = = SearchElement){
indexPtr = ptr;
return indexPtr;}

在这种情况下,当它找到元素时,它将返回指针的地址,是否正确?没有初始化
indexPtr
,所以我假设它也是节点类型指针

无法使用链表进行二进制搜索。假设下面是您的链接列表

1->2->3->4->5->6 and you are searching for 1.
你不能在固定时间内得到第三个元素。在二进制搜索中,您必须随时跳转到元素。考虑你的链表是100万个节点。有办法在固定时间到达第500000个节点吗?如果答案是肯定的,那么在链表的任何实现中,都可以在O(log(n))中找到make

检查并回答问题和答案

线性搜索代码应该是这样的

ptr = head;
while (ptr-> next != null)
    if(ptr -> data == searchedElement)
        return ptr;
它将返回指向匹配节点的指针

已经有一段时间了,我没有检查过,但应该是这样的

cout << "address of ptr: " << &ptr << " address of node " << ptr << " value inside the node " << *ptr << endl; 

cout无法使用链表进行二进制搜索。假设下面是您的链接列表

1->2->3->4->5->6 and you are searching for 1.
你不能在固定时间内得到第三个元素。在二进制搜索中,您必须随时跳转到元素。考虑你的链表是100万个节点。有办法在固定时间到达第500000个节点吗?如果答案是肯定的,那么在链表的任何实现中,都可以在O(log(n))中找到make

检查并回答问题和答案

线性搜索代码应该是这样的

ptr = head;
while (ptr-> next != null)
    if(ptr -> data == searchedElement)
        return ptr;
它将返回指向匹配节点的指针

已经有一段时间了,我没有检查过,但应该是这样的

cout << "address of ptr: " << &ptr << " address of node " << ptr << " value inside the node " << *ptr << endl; 

cout 1)二进制搜索不能应用于任何链表(单、双和循环)?你能更清楚地解释一下为什么没有办法对链表使用二进制搜索吗?2) 如果我想显示返回的输出,那么它将显示匹配节点的地址,对吗?这意味着我们可以应用二进制搜索来解决这些问题,当我们可以在固定时间内访问任何元素时,就像在数组中一样,对吗?不完全是这样,有一些类型可以在固定时间内访问,但不能进行二进制搜索。比如散列。此外,对于二进制搜索,应该对数组进行排序。当数组、arraylist、vector、matrix排序时,您可以对它们进行二进制搜索。那么,二进制搜索不适用于链表的确切原因是什么?1)二进制搜索不能应用于任何链表(单、双和循环)?你能更清楚地解释一下为什么没有办法对链表使用二进制搜索吗?2) 如果我想显示返回的输出,那么它将显示匹配节点的地址,对吗?这意味着我们可以应用二进制搜索来解决这些问题,当我们可以在固定时间内访问任何元素时,就像在数组中一样,对吗?不完全是这样,有一些类型可以在固定时间内访问,但不能进行二进制搜索。比如散列。此外,对于二进制搜索,应该对数组进行排序。你可以在数组、arraylist、向量、矩阵中进行二进制搜索,当它们被排序时。那么,二进制搜索不能使用链表的确切原因是什么呢。