我有一个单链表,在任何给定时间可以有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
是常规的链接列表,您可以将其出队并再次排队。但是您仍然可以获得所需的恒定时间查找。这是通过一个聪明的搜索功能完成的,该搜索功能通常会遍历链接列表,但是一旦到达了特定节点在列表中的位置,您便可以从其存储的数组中查找固定时间。
如果您愿意的话,我可能可以澄清更多有关此概念的信息,但我认为您可以从描述中很好地了解我要做什么。