在了解了类中的数组和链表后,我很好奇是否可以使用数组创建链表,反之亦然。
要使用数组创建链表,我是否可以将链表的第一个值存储在数组的索引0处,指向数组索引1处的下一个节点的指针,依此类推?我想我很困惑,因为“指向下一个”的指针似乎是多余的,因为我们知道存储下一个节点的值的索引将始终是:当前节点的值的索引+ 2.
我认为使用链表创建数组是不可能的,因为数组涉及连续内存,但链表可以将节点存储在计算机内存的不同部分。有没有办法解决这个问题?
提前致谢。
答案 0 :(得分:1)
基于数组的链表通常以二维数组定义,如:
好处:该列表仅占用最初定义的特定内存量。
向下:该列表只能包含特定预定义数量的项目。
作为单个链表,数据结构必须保持头指针。此数据结构包含头指针,但在此特定实现中,它是一个int。列表的头部是将索引保存到第一个节点的指针。第一个节点将索引保存到下一个节点,依此类推。列表中的最后一个节点将保留下一个值-1。这将指示列表的结尾。将索引作为元素的事实添加到结构中需要空闲列表头。这个免费列表被合并到相同的2-dementional数组中。正如头部是一个int,自由列表指针是一个int。
现在数据结构由3个主要元素组成。头指针,自由头指针和二维数组。必须正确初始化列表才能使用列表。该列表应初始化如下。
参考是link
答案 1 :(得分:0)
您可以将链接列表存储在数组中,但仅限于您拥有有序列表。正如您所说,您不需要指针,因为您知道顺序(它在数组排序中是明确的)。在数组或链表之间进行选择的主要区别是:
所以,回答你的具体问题:
1)这样做没有价值 - 按照上面的详细说明
2)您还没有提供足够的信息来回答连续内存分配的问题。它取决于很多:操作系统,体系结构,编译器实现。你甚至没有提到编程语言。简而言之,在链表和数组之间进行选择与连续内存分配几乎没有关系,更多与使用有关。例如,java LinkedList
类和ArrayList
类都代表List
实现,但是根据使用模式进行了专门化。预计LinkedList
对于"列表"表现更好。期待高度修改(虽然在几年前完成的测试中证明这一点可以忽略不计 - 我不确定最新版java中的状态)。
此外,您通常不会创建一个带有链接列表的数组"或相反亦然。它们都是用于构建更大组件的抽象数据结构。它们代表了更广泛背景下的事物列表(例如,某个部门有员工列表)。每种数据类型都具有使用优势。同样,您可以使用集合,队列,堆栈等。这取决于您的使用需求。
我真的希望我不会再困扰你了!