数组与链表的区别:
1.数组中的数据在内存中按顺序存放的,是静态分配的,每个元素占用相同的内存。而链表是随机存储的,通过在元素中的指针联系到一起。链表
是一种常见的数据组织形式,它采用动态分配内存的形式实现。需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造
成 内存空间的浪费。
2.数组必须先定义固定的长度(元素个数),不能适应动态的增减的情况,当数据增加时,可能超出原先定义的元素个数,当数据减少时,会造成
内存浪费。在数组中删除、插入数据时需要移动其他数据项。链表动态地进行存储分配,可以适应数据动态增减的情况,且可以方便的插入、删
除数据项。
3.要访问数组中的元素可以按下表索引来访问,速度比较快,如果进行插入或删除操作的话就得移动很多元素,所以对数组进行该操作其效率会很
低。由于链表是随机存储的,在插入、删除操作上效率相对较高。如果你要访问链表中一个元素,你需要从第一个元素开始,一直找到你需要的元素位置。
但是增加和删除一个元素对于链表数据结构就非常简单了, 只要修改元素中的指针就可以了。但如果要访问链表中的某个元素的话,就得从链表的头逐个
遍历,知道找到所需要的元素为止,所 以链表的随机访问的效率就比数组要低。
4.(静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小。链表从堆中分配空间, 自由度大但是申请管理比较麻烦.
5.数组在内存中开辟连续的一块区域,如果一个数据要两个内存单元,一组5个数据10个单元就够了,无需标记其地址,因为数组定义时候标顶了
第一个原许的地址,其他四个都知道了。
链表可可以是连续的,也可以是不连续的,但一般都是不连续的,尽管在内存中是连续的,我们也不把他当作是连续的,而是把他当作是不连续
的,因为如果把他当作是连续的,不如当作是数组了,在某些情况下。一链5个数据,如果每个数据本身用2个内存单元,那么10个单元是不够
的,因为每个数据都要表示出下个数据在哪里,所以一个数据本身用2个单元,再用1个单元表示此链下一个数据在什么地址。各有用处。