Skip to main content
 首页 » 编程设计

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

2025年05月04日23fff_TT

我有一个单链表,在任何给定时间可以有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是常规的链接列表,您可以将其出队并再次排队。但是您仍然可以获得所需的恒定时间查找。这是通过一个聪明的搜索功能完成的,该搜索功能通常会遍历链接列表,但是一旦到达了特定节点在列表中的位置,您便可以从其存储的数组中查找固定时间。

如果您愿意的话,我可能可以澄清更多有关此概念的信息,但我认为您可以从描述中很好地了解我要做什么。