现在的位置: 首页 > 综合 > 正文

数组和链表的区别

2013年11月11日 ⁄ 综合 ⁄ 共 1618字 ⁄ 字号 评论关闭

1、

数组是一块连续的空间,声明时长度要确定

链表是一块不连续的动态空间,长度可变

2、

数组的优点是速度快,数据操作直接使用偏移地址

链表需要顺序检索节点,效率低

3、

链表的优点是可以快速查如何删除节点,大小动态分配长度不需要固定

链表不存在越界问题,数组有越界问题

4、

链表的特性是在中间任意位置添加删除元素的都非常的快,不需要移动其它的元素。 
链表顾名思义,要把各个元素链接起来才算撒。   
通常链表每一个元素都要保存一个指向下一个元素的指针(单链表)。   
双链表的化每个元素即要保存到下一个元素的指针,还要保存一个上一个元素的指针。   
循环链表则把最后一个元素中保存下一个元素指针指向第一个元素。   
5、
数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,这个编号叫做下标,我们可以通过下标来区别这些元素。数组元素的个数有时也称之为数组的长度。
6、
array(数组):由系统分配的连续不断的内存空间,必须是相同类型的数据
arrayList(数组链表):如SK_SHAKA所说,可以是不连续的内存空间组成的列表,它可以装载不同类型的数据
List(泛型链表):和arrayList的唯一区别就是它是系统强制要求装载相同类型的数据,否则会编译报错

7(转载)、

 C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小。而在实际应用中,用户使用数组之前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而造成内存空间的浪费。       链表是一种常见的数据组织形式,它采用动态分配内存的形式实现。需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费。      A 从逻辑结构来看      A-1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。      A-2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)         B 从内存存储来看      B-1. (静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小      B-2. 链表从堆中分配空间, 自由度大但是申请管理比较麻烦.   ======================================      数组中的数据在内存中的按顺序存储的,而链表是随机存储的!   要访问数组中的元素可以按下标索引来访问,速度比较快,如果对他进行插入操作的话,就得移动很多元素,所以对数组进行插入操作效率很低!      由于连表是随机存储的,链表在插入,删除操作上有很高的效率(相对数组),如果要访问链表中的某个元素的话,那就得从链表的头逐个遍历,直到找到所需要的元素为止,所以链表的随机访问的效率就比数组要低          数组在内存中开辟连续的一块区域,如果一个数据要两个内存单元,一组5个数据10个单元就够了,无需标记其地址,因为数组定义时候标顶了第一个原许的地址,其他四个都知道了。   链表可可以是连续的,也可以是不连续的,但一般都是不连续的,尽管在内存中是连续的,我们也不把他当作是连续的,而是把他当作是不连续的,因为如果把他当作是连续的,不如当作是数组了,在某些情况下。一链5个数据,如果每个数据本身用2个内存单元,那么10个单元是不够的,因为每个数据都要表示出下个数据在哪里,所以一个数据本身用2个单元,再用1个单元表示此链下一个数据在什么地址。   各有用处。

 

双向链表:

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表

抱歉!评论已关闭.