到目前为止,在数据结构中,我使用指针研究了使用数组和链表(单,双和圆)的列表。大纲中的下一件事是线性和二进制搜索。我找到了列表和链表的线性搜索示例。对于二进制搜索,我在使用数组的列表中找到了一个示例,但没有链表(单,双和圆)的示例 1)我想知道二进制搜索不能适用于任何类型的链表? 2)同样在线性搜索单链表我看到了这段代码
if (ptr->data = = SearchElement){
indexPtr = ptr;
return indexPtr;}
在这种情况下,当它找到元素时它将返回指针的地址,它是否正确?没有indexPtr
的初始化,所以我假设它也是节点类型指针。
答案 0 :(得分:0)
无法使用链接列表进行二进制搜索。想象一下,以下是您的链接列表。
1->2->3->4->5->6 and you are searching for 1.
你不能在恒定时间内获得第3个元素。在二进制搜索中,您必须随时跳转到元素。考虑您的链表是100万个节点。有没有办法在恒定时间转到第500,000个节点?如果答案是肯定的,那么在链表的任何实现中,你都可以在O(log(n))中找到它。
线性搜索代码应该是这样的。
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;