虽然本身没有任何东西 list , 但你肯定可以谈论链表实现.C
数组:随机访问,预定义大小.
链接列表:顺序访问,运行时大小.
其他语言,例如Python,可能同时包含lists和arrays,它们的含义可能不同.
以下有用的评论:
您可以添加数组列表.列表内部是一个数组,在需要时加倍,当只有1/4满时减半.这使得O(1)用于添加,删除,获得(索引)摊销.- lasseespeholt
Python list不是链表.和Python之间的区别list和array是list能够存储任何东西而阵列只能存储原始类型(int,float等).- KennyTM
在C中,数组是包含多个对象的连续存储的固定大小区域,一个接一个.这个数组是一个"对象",意思是C赋予这个词 - 基本上只是一些代表某事的记忆.一个对象可能只是一个int.
您可以稍微区分数组对象和数组类型.通常人们使用分配的数组对象malloc,并通过指向第一个元素的指针使用.但是C也有不同大小的数组的特定类型,也适用于可变长度数组,其大小在创建时设置.VLA具有略微误导性的名称:在编译时它没有固定的意义上,大小只是"可变的".它在对象的生命周期内无法改变.
因此,当我说数组是固定大小时,我的意思是一旦创建了数组,大小就不会改变,这包括VLA.有realloc一个逻辑上返回指向新数组的指针,该数组替换旧数组,但有时可以返回传入的相同地址,并且已经更改了数组的大小.realloc在内存分配上运行,而不是在阵列上运行.
这就是数组.C编程语言没有定义任何称为列表的东西.无法真正比较明确定义的东西,未定义的东西;-)通常"列表"意味着链表,但在某些情况下或其他语言中它意味着其他东西.
就此而言,在其他语言中,"数组"可能意味着其他东西,尽管我不能立即想到一种语言,它意味着与C数组有很大不同.
如果你的问题确实与C无关,并且是一个与语言无关的数据结构问题,"数组和链表之间有什么区别?",那么它就是这样的重复: