假设我有一个包含100个元素的链表。
struct node{
int data;
node*next;
}
我想访问n位置的某个元素,所以我必须做一个循环。如果我不在链表上循环,而是在获取输入/读取数据时将其数据元素存储在数组中,并且当我想在n位置输出任何元素时,我可以调用arr[n],那么这是更有效的方法还是应该使用循环。
C++语言的美妙之处在于它提供了广泛的"容器类"选择,您可以"简单地使用"。所以您真的不需要麻烦,比如滚动自己的链表("不要做已经完成的事情…"(
此外,这些容器类中的许多都提供了"[
数组索引]
"功能,因此可以将内容引用为有序集合,就好像它是传统的"数组"一样,尽管它实际上不是。它们还可以提供其他选项,例如通过某种键检索元素。
只需浏览特定C++实现中可用的一组容器类,就可以"立即获得"最适合您需求的容器类。无需实现。你只知道它们确实有效,你真的不必在乎它们是如何工作的。
如果经常必须访问某些位置的元素,数组通常会更快,是的。如果你只需要做一次,你可以坚持现有的节点结构,然后在它上循环。为了在某个位置查找元素,你可以在O(1(中的数组上和O(n(中的链表中进行查找。
链表还提供了其他优点,例如恒定时间插入,这是数组所没有的。除非您更准确地说明您的问题,否则我们无法告诉您哪种数据结构更可取。
编辑:有关列表与数组用例的更多信息,请参阅数组与链表。