链表和数组的区别

数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可。链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可。貌似链表比数组还要麻烦些,而且效率低些。

想到这些相同处中的一些细微的不同处,于是他们的真正不同处渐渐显现了:链表的效率为何比数组低些?先从两者的初始化开始。数组无需初始化,因为数组的元素在内存的栈区,系统自动申请空间。而链表的结点元素在内存的堆区,每个元素须手动申请空间,如malloc。也就是说数组是静态分配内存,而链表是动态分配内存。链表如此麻烦为何还要用链表呢?数组不能完全代替链表吗?回到这个问题只需想想我们当初是怎么完成学生信息管理系统的。为何那时候要用链表?因为学生管理系统中的插入,删除等操作都很灵活,而数组则大小固定,也无法灵活高效的插入,删除。因为堆操作灵活性更强。数组每次插入一个元素就需要移动已有元素,而链表元素在堆上,无需这么麻烦。

说了这么多,数组和链表的区别整理如下:

数组静态分配内存,链表动态分配内存;

数组在内存中连续,链表不连续;

数组元素在栈区,链表元素在堆区;

数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n);

数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。

时间: 2024-10-15 12:35:56

链表和数组的区别的相关文章

链表和数组的区别在哪里 【微软面试100题 第七十八题】

题目要求: 链表和数组的区别在哪里? 题目分析: 数组静态分配内存,链表动态分配内存: 数组预先定义长度,链表预先无需管理长度: 数组在内存中连续,链表可能连续: 数组元素在栈区,链表元素在堆区: 数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n): 数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1): 数组相对更省空间,存储一个元素链表还需要存储一个next指针: 数组排序相对比链表简单.

链表补充及链表和数组的区别

初稿:2017-11-19 13:05:57 4种链表 不循环单链表:加头结点,使得插入删除操作相同,不必特别处理插入或删除的是第一个位置的情况. 循环单链表:引用参数是最后一个结点的指针pTail,这样既能迅速找到首结点pHead = pTail->next,也能迅速获取表尾. 不循环双向链表:p所指结点后插入结点q.  q->next = p->next; p->next->pre = q; p->next = q; q->pre = p; 循环双向链表:引用

链表和数组的区别在哪里?

二者都属于一种数据结构 从逻辑结构来看 1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况.当数据增加时,可能超出原先定义的元素个数:当数据减少时,造成内存浪费:数组可以根据下标直接存取. 2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入.删除数据项.(数组中插入.删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据next指针找到下一个元素 从内存存储来看 1. (静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小 2. 链表从

面试-链表和数组的区别

相关资料:1.http://blog.csdn.net/kedark/article/details/549155772.http://blog.csdn.net/wqsys/article/details/7656650 数组:1.将元素在内存中连续存放.2.每个元素占用内存相同.3.通过下标迅速访问数组中任何元素.4.增加.删除一个元素需移动大量元素.5.需要快速访问数据,很少或不插入和删除元素,应用数组.6.(静态)数组从栈中分配空间, 对于程序员方便快速,但自由度小.7.内存占用空间是固

[数据结构] 数组与链表的优缺点和区别

概述 数组 是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中.同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素.如果应用需要快速访问数据,很少插入和删除元素,就应该用数组. 链表 中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起,每个结点包括两个部分:一个是存储 数据元素 的 数据域,另一个是存储下一个结点地址的

集合 和 数组 的区别

集合框架 包含三块内容 对外的接口 ,接口的实现和对集合运算的算法. 一 集合 和数组的区别: 1.数组声明元素的类型,而集合不声明. 2.数组声明之后有固定的大小.一旦生成无法改变.而集合是可以改变大小的, 集合提供了更多的成员方法,能满足更多的需求. 3.数组无论是效率还是检查类型都是最好的. 数组是JAVA语言内置的数据类型,它是一个线性的序列,所以它可以快速的访问其他的元素. 4.数组是大小固定的,一旦创建无法扩容:集合大小不固定. 5.数组的存放类型只能是一种,集合的存放类型可不是一种

C类型字符串和字符数组的区别

1.字符串和字符数组的区别,字符数组和普通数组一样,里面的每个元素是一个个的字符,字符串是存在字符数组中的,字符串的结尾处补上了“\0”截止符. 定义过字符串后,得到的是字符数组的首元素的指针,在结尾处加入截止符,可以方便的访问字符串中的任何一个元素.C类型的字符串是存在字符数组中的,在字符串的结尾处补上"\0",这个结尾符是用来标志字符串结尾的,它的作用是const * p; //p是一个常量指针 2.数组名和指针的区别 int a [20]; int *p =a; (1)数组名的内

数组指针和指针数组的区别

数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长.也就是说执行p+1时,p要跨过n个整型数据的长度. 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组. p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++;       //该语句执行过后,也就是

集合和数组的区别

集合和数组的区别? *                     1)长度的区别: *                         数组:长度是固定的 *                         集合:长度是可变的 *                     2)内容的区别: *                         数组存储的是同一种类型的元素:举例:水杯中的水 *                         集合存储的是不同类型的元素:举例:杯子:加水,加可乐; *