数组和列表之间的区别

Roh*_*ane 4 c

数组和列表有什么区别?

Ste*_*hen 6

在C中没有标准列表这样的东西.在C++中有这样的东西,它被实现为双链表.

主要区别在于数组具有随机访问权限 - 您可以及时访问数组的任何成员O(1)(即,如果a是数组a[4]),并且在编译时具有预设的大小.链接列表具有顺序访问权限 - 要访问元素,您必须循环遍历列表,直到找到所需的元素(即,如果b是链接列表,要获得第5个元素,b则必须遍历元素0, 1,2,3和4),大小可以动态增长和缩小.


Jun*_*ter 5

虽然本身没有任何东西 list , 但你肯定可以谈论链表实现.C

数组:随机访问,预定义大小.
链接列表:顺序访问,运行时大小.

其他语言,例如Python,可能同时包含lists和arrays,它们的含义可能不同.

以下有用的评论:

您可以添加数组列表.列表内部是一个数组,在需要时加倍,当只有1/4满时减半.这使得O(1)用于添加,删除,获得(索引)摊销.- lasseespeholt

Python list不是链表.和Python之间的区别listarraylist能够存储任何东西而阵列只能存储原始类型(int,float等).- KennyTM

  • Python的`list`不是链表.Python`list`和`array`之间的区别是`list`可以存储任何东西,而`array`只能存储原始类型(int,float等). (5认同)
  • 伙计们,使用Python系列我只是建议有一些区别和内置类型的语言. (3认同)

Ste*_*sop 5

在C中,数组是包含多个对象的连续存储的固定大小区域,一个接一个.这个数组是一个"对象",意思是C赋予这个词 - 基本上只是一些代表某事的记忆.一个对象可能只是一个int.

您可以稍微区分数组对象和数组类型.通常人们使用分配的数组对象malloc,并通过指向第一个元素的指针使用.但是C也有不同大小的数组的特定类型,也适用于可变长度数组,其大小在创建时设置.VLA具有略微误导性的名称:在编译时它没有固定的意义上,大小只是"可变的".它在对象的生命周期内无法改变.

因此,当我说数组是固定大小时,我的意思是一旦创建了数组,大小就不会改变,这包括VLA.有realloc一个逻辑上返回指向新数组的指针,该数组替换旧数组,但有时可以返回传入的相同地址,并且已经更改了数组的大小.realloc在内存分配上运行,而不是在阵列上运行.

这就是数组.C编程语言没有定义任何称为列表的东西.无法真正比​​较明确定义的东西,未定义的东西;-)通常"列表"意味着链表,但在某些情况下或其他语言中它意味着其他东西.

就此而言,在其他语言中,"数组"可能意味着其他东西,尽管我不能立即想到一种语言,它意味着与C数组有很大不同.

如果你的问题确实与C无关,并且是一个与语言无关的数据结构问题,"数组和链表之间有什么区别?",那么它就是这样的重复:

数组与链表