程序员求职之道(《程序员面试笔试宝典》)之数据结构与算法(数组和链表的区别)?

数组与链表是两种不同的数据存储方式, 链表的特性是在中间任意位置添加元素、删除元素都非常地快,不需要移动其它的元素,通常对于单链表而言,链表中每一个元素都要保存一个指向下一个元素的指针,而对于双链表,每个元素既要保存一个指向下一个元素的指针,还要保存一个指向上一个元素的指针,循环链表则在最后一个元素中保存一个指向第一个元素的指针。

而数组是一组具有相同类型和名称的变量的集合,这些变量称为数组的元素,每个数组元素都有一个编号,这个编号称为数组的下标,可以通过下标来区别并访问这些元素,数组元素的个数也称为数组的长度。 

具体而言,数组和链表的区别主要表现在以下几个方面内容:

(1)       逻辑结构。数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况,即在使用数组之前,就必须对数组的大小进行确定。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。数组中插入、删除数据项时,需要移动其它数据项。而链表采用动态分配内存的形式实现,可以适应数据动态地增减的情况,需要时可以用new/malloc分配内存空间,不需要时用delete/free将已分配的空间释放,不会造成内存空间浪费,且可以方便地插入、删除数据项。

(2)       内存结构。(静态)数组从栈中分配空间,对于程序员方便快速,但是自由度小。链表从堆中分配空间,自由度大,但是申请管理比较麻烦。

(3)       数组中的数据在内存中是顺序存储的,而链表是随机存储的。数组的随机访问效率很高,可以直接定位,但插入、删除操作的效率比较低。链表在插入、删除操作上相对数组有很高的效率,而如果要访问链表中的某个元素的话,那就得从表头逐个遍历,直到找到所需要的元素为止,所以,链表的随机访问效率比数组低。

(4)       链表不存在越界问题,数组有越界问题。数组便于查询,链表便于插入删除,数组节省空间但是长度固定,链表虽然变长但是占了更多的存储空间。

所以,由于数组存储效率高,存储速度快的优点,如果需要频繁访问数据,很少插入删除操作,则使用数组;反之,如果频繁插入删除,则应使用链表。二者各有用处。

 

posted on 2014-10-02 18:14  anyuan9  阅读(118)  评论(0编辑  收藏  举报

导航