我试图在c中创建链接列表。扭曲是我想为列表分配内存,以便所有节点连续存储在内存中。 也许阵列结构是可行的方法。 有什么想法吗?
答案 0 :(得分:6)
显而易见的方法是在块中分配多个节点,然后将它们链接到一个空闲列表中。当您需要将一个节点添加到链接列表时,您将从空闲列表的头部获取一个节点。如果要删除节点,请将其链接回空闲列表:
struct node {
struct node *next;
// other data here.
};
node *free_list;
#define block_size 1024
void initialize() {
free_list = malloc(block_size * sizeof(struct node));
for (i=0; i<block_size-1; i++)
free_list[i].next = &free_list[i+1];
free_list[block_size-1].next = NULL;
}
struct node *alloc_node() {
struct node *ret;
if (free_list == NULL)
return NULL;
ret = free_list;
free_list = free_list->next;
return ret;
}
void free_node(struct node *n) {
n->next = free_list;
free_list = n;
}
答案 1 :(得分:0)
如果您正在查看链接列表,请不要担心它们在内存中的位置。这就是节点上指针的用途。
如果你想要它们顺序,请分配一个数组。
答案 2 :(得分:0)
是的,使用数组。更有趣的是为什么你想要这个。如果您的程序要求它工作,那么您需要确保您的阵列足够大以存储可能分配的所有节点。如果没有,您可以分配批量节点。
FYI。我已经看到过去使用过这种策略,假设顺序分配的节点在搜索列表时会导致更少的缓存未命中。在感兴趣的系统中,实际上并没有提供太多的性能改进。 [当然没有足够的分析!。]
答案 3 :(得分:0)
你可以做这样的事情
struct node
{
int data;
struct node *next;
};
struct node linkedlist[50];
这将为连续位置的链表结构分配空间。