我正在对已排序的双向链表(包含一堆整数ID)进行线性搜索。为此,我使用分配给head的临时指针(保留dbl的第一个值),然后继续执行下一个指针,直到找到请求的ID。
为了缩短搜索时间,我可以将另一个指针分配给tail(持有最后一个值的指针),并与前一个指针一起向后前进
我的线性搜索实现
struct node* find(long int value) {
struct node*temp = head, *temp1 = tail;
while(temp->id < value && temp1->id > value){
temp = temp->next;
temp1 = temp1->prev;
}
if(temp->id == value)
return temp;
else if(temp1->id == value)
return temp1;
else
return NULL;
}
这里temp1仅在温度向前移动之后才继续向后移动
我的问题:
有没有办法同时移动前向(temp)和向后(temp1)指针?
[我的意思是平行移动两个指针,甚至可以减少共谋的时间]
关键字:双向链表,C语言排序
答案 0 :(得分:3)
假设您的C实现支持它,则可以包含<threads.h>
标头并创建新线程。这将允许您使用一个线程向前扫描列表,而使用另一个线程向后扫描列表。但是,与此相关的问题很多,
考虑使用并行处理来提高程序速度并不是一个坏主意,但是对于双向链接列表的简单扫描来说,这可能不是正确的方法。除了上面讨论的那些以外,还有其他并发症。
答案 1 :(得分:2)
C语言不支持同时执行多个功能。唯一的解决方案是多线程。但是,这可能会打开Pandora的框(一个函数如何知道另一个函数在哪里工作?),这可以通过使用关键部分,互斥锁等来解决。这是一个有趣的话题,但是您可能需要做很多阅读工作才能知道使工作正常。