c - 快速随机访问链表节点

标签 c optimization linked-list random-access

我有一个单链表,在任何给定时间都可以有 10000<< 节点。

现在,在界面中,我需要按顺序打印这些内容,并且用户可以访问单个节点并在该节点上执行操作。显然,如果用户选择的节点数非常高,则必须经过数千个节点才能访问所需的节点。

我当前的修复将链表“转换”为数组,因为我的代码是多线程的,所以我的链表可以在任何给定时间增长。但通过代码设计永远不会缩小。

这是我用来将链表转换为数组的代码。

unsigned int    i=0;
unsigned int    LL_arr_bufsize=128;
my_ll           **LL_arr;
my_ll           *temp;

LL_arr = malloc(LL_arr_bufsize * sizeof(my_ll *));
// err check mem alooc

temp = l_list->next;
while (temp != NULL) {
    LL_arr[i] = temp;

    temp = temp->next;

    if (++i == LL_arr_bufsize) {
        LL_arr_bufsize = LL_arr_bufsize * 2;
        LL_arr = realloc(LL_arr, LL_arr_bufsize * sizeof(my_ll *));
        // err check mem alloc
    }

} 

我基本上想知道是否有更好的方法来访问任何给定节点,而不会在访问给定节点之前产生遍历整个列表的开销......

最佳答案

我可能会被否决,因为我真的只是想到了这个想法,它可能有一些缺陷。就这样吧。

如果你做一个二维节点堆栈会怎么样。我出来了。

NodeList - 包含 10 个节点的数组及其自己的索引。 (您可以尝试更大的值)

发生的情况是,NodeList 是一个常规链接列表,您可以将其取消排队并再次排队。但您仍然可以获得一些您正在寻找的恒定时间查找。这是通过一个聪明的搜索函数完成的,该函数通常会遍历链接列表,但是,一旦它到达列表中保存特定节点的位置,您就可以从它存储的数组中进行恒定时间的查找。

如果您愿意,我可能可以进一步澄清这个概念,但我认为您可以通过描述更好地了解我想要的内容。

关于c - 快速随机访问链表节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25088528/

相关文章:

C -> 大型机上的 COBOL 跨语言通信

C++ 指向字节数组优化的指针

Scala 2.8 与 2.9 基准测试,奇怪的结果

c++ - 如何正确地对 [模板化] C++ 程序进行基准测试

Java LinkedList 数组引用

C:将文本文件复制到链接列表中会导致异常:抛出异常:读取访问冲突。当前为 0x2C2DE900

c - 为什么我的文件打不开以及如何修复它?

c++ - 如何将几个数字合并为一个,例如 1,7,3 = 173?

java - Java中的无锁并发链表

在 C 中将 int 转换为 float(无转换)