C++ 当搜索链表和数组时,它们之间有什么区别?

C++ 当搜索链表和数组时,它们之间有什么区别?,c++,arrays,search,data-structures,linked-list,C++,Arrays,Search,Data Structures,Linked List,我知道数组的值可以通过它们的位置直接访问,链表必须一个接一个地遍历它们,但不知道如何解释搜索时它们的开销和存储的差异 (我想更多的是,前一个节点在尝试访问下一个节点时,是否需要临时存储在某个位置?在遍历它们时,系统部分是否需要任何额外的存储或开销?在搜索数组时也是如此) 谁能告诉我在每个结构中搜索时会发生什么?或者简单地指向一个正确的方向数组是一个固定大小的向量变量 链表没有指定的大小:列表的每个元素都包含指向下一个元素的指针。这就是为什么需要按顺序遍历它。这里的优点是,结构不应分配在连续的内存

我知道数组的值可以通过它们的位置直接访问,链表必须一个接一个地遍历它们,但不知道如何解释搜索时它们的开销和存储的差异

(我想更多的是,前一个节点在尝试访问下一个节点时,是否需要临时存储在某个位置?在遍历它们时,系统部分是否需要任何额外的存储或开销?在搜索数组时也是如此)


谁能告诉我在每个结构中搜索时会发生什么?或者简单地指向一个正确的方向

数组是一个固定大小的向量变量

链表没有指定的大小:列表的每个元素都包含指向下一个元素的指针。这就是为什么需要按顺序遍历它。这里的优点是,结构不应分配在连续的内存块中,并且如果在其中添加更多元素,则不需要调整大小

同样在数组中,如果删除一个元素,则需要移动之前的所有元素。如果在数组的中间插入一个元素,则需要转换元素来为新的元素腾出空间。在列表中,您只需更新指针:


另一方面,数组可以随机访问,不需要顺序访问:因此它们可以更快地搜索对象、排序等。

数组是一个固定大小的向量变量

链表没有指定的大小:列表的每个元素都包含指向下一个元素的指针。这就是为什么需要按顺序遍历它。这里的优点是,结构不应分配在连续的内存块中,并且如果在其中添加更多元素,则不需要调整大小

同样在数组中,如果删除一个元素,则需要移动之前的所有元素。如果在数组的中间插入一个元素,则需要转换元素来为新的元素腾出空间。在列表中,您只需更新指针:


另一方面,数组可以随机访问,不需要顺序访问:因此它们可以更快地搜索对象、排序等。

随机访问列表元素允许您实现搜索算法,如二进制搜索,使用链表是不切实际的。

通过对列表元素的随机访问,可以实现诸如二进制搜索之类的搜索算法,而使用链表是不切实际的。

更清楚地说,通过“搜索”你的意思是按顺序访问每个元素吗?你的基本算法书或基本算法课程解释了这一点。@LightnessRacesinOrbit web允许更快的随机访问;)读吧。数以百万计的“C++链表@Potatoswatter”谷歌搜索结果好吧,我有点想知道在链表或数组中搜索时系统会发生什么。检查下一个值时,是否将上一个值存储在临时位置?这就是为什么我要问是否有任何开销或存储。说得清楚一点,“搜索”是指按顺序访问每个元素吗?您的基本算法书或基本算法课程对此进行了解释。@LightnessRacesinOrbit web允许更快的随机访问;)读吧。数以百万计的“C++链表@Potatoswatter”谷歌搜索结果好吧,我有点想知道在链表或数组中搜索时系统会发生什么。检查下一个值时,是否将上一个值存储在临时位置?这就是为什么我要问,是否有任何开销或存储。您可以快速绘制图表@在链表中搜索有那么简单吗?我想的更多的是,在尝试访问下一个节点时,前一个节点是否需要临时存储在某个位置?当通过它们时,系统部分是否需要额外的存储或开销?同样,在面向对象语言中搜索数组时,通常会有实现此逻辑的对象。如果您需要使用普通C语言,这也不难,但是如果您不熟悉这些东西,学习什么是指针以及它们是如何工作的可能会更加困难。将链表视为一条链:每个环都链接到下一个环。这不是一个难以实现的结构,也不难处理。链表中的搜索始终是连续的,因此每个元素都可以链接到下一个元素,如果您愿意,还可以链接到上一个元素(双链表),因此您也可以往回迭代。您可以快速绘制图表@在链表中搜索有那么简单吗?我想的更多的是,在尝试访问下一个节点时,前一个节点是否需要临时存储在某个位置?当通过它们时,系统部分是否需要额外的存储或开销?同样,在面向对象语言中搜索数组时,通常会有实现此逻辑的对象。如果您需要使用普通C语言,这也不难,但是如果您不熟悉这些东西,学习什么是指针以及它们是如何工作的可能会更加困难。将链表视为一条链:每个环都链接到下一个环。这不是一个难以实现的结构,也不难处理。链表中的搜索总是按顺序进行的,因此每个元素都可以有到下一个元素的链接,如果您愿意的话,还可以有到上一个元素的链接(双链表),因此您也可以进行迭代。