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

初稿:2017-11-19 13:05:57

4种链表

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

链表和数组的区别

数组初始容量一旦确定,不能再改变,适合要处理的数据量已知的情况。

未知要处理的数据量使用数组,可能造成空间浪费或容量不足,虽然有动态数组可扩容,但是频繁扩容会使系统产生很大的开销。

链表容量不限,长度与元素个数相同,但是需要额外的空间存放下一元素的地址,空间使用率不如数组。

按index查找,数组存取元素时间复杂度是O(1),链表是O(n)

链表插入和删除时间复杂度是O(1),数组是O(n)

查找值是value的某个元素,速度则相同。

时间: 2024-08-02 21:58:33

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

链表和数组的区别

数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可.链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可.貌似链表比数组还要麻烦些,而且效率低些. 想到这些相同处中的一些细微的不同处,于是他们的真正不同处渐渐显现了:链表的效率为何比数组低些?先从两者的初始化开始.数组无需初始化,因为数组的元素在内存的栈区,系统自动申请空间.而链表的结点元素在内存的堆区,每个元素须手动申请空间,如malloc.也就是说数组是静态分配内存,而链表是动态分配内存.链表如此麻烦为何还要用链表呢?数组不

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

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

面试-链表和数组的区别

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

浅谈单链表与双链表的区别

昨天面试官面试的时候问了我一道关于链表的问题:情境如下 面试官:请说一下链表跟数组的区别? 我:数组静态分配内存,链表动态分配内存:数组在内存中连续,链表不连续:数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n):数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1). 根据以上分析可得出数组和链表的优缺点如下: 数组的优点 随机访问性强(通过下标进行快速定位) 查找速度快数组的缺点 插入和删除效率低(插入和删除需要移动数据) 可能浪费内存(因为是连续的,所以每次申

单链表,双链表,循环链表的区别

单向链表(单链表) 单向链表,它包含两个域,一个信息域和一个指针域.这个链接指向表中的下一个节点,而最后一个节点则 指向一个空值NULL. 单向链表只可向一个方向遍历. 查找一个节点的时候需要从第一个节点开始每次访问下一个节点,一直访问到需要的位置.也可以提前把一个节点的位置另外保存起来,然后直接访问. 双向链表,(双链表) 双向链表中不仅有指向后一个节点的指针,还有指向前一个节点的指针.第一个节点的"前连接"指向NULL,最后一个节点的"后连接"指向NULL. 这

深度解析(三)数组、单链表和双链表

数组.单链表和双链表介绍 以及 双向链表的C/C++/Java实现 概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现.内容包括:数组单向链表双向链表1. C实现双链表2. C++实现双链表3. Java实现双链表 数组 数组有上界和下界,数组的元素在上下界内是连续的. 存储10,20,30,40,50的数组的示意图如下: 数组的特点是:数据是连续的

链表的数组实现 令链表的所有元素在数组中保持紧凑 《算法导论》10.3-4

让长度为m的链表的所有元素占用数组的前m个位置. 假设数组总长度为SIZE,用一个变量freeHead记录空闲表的起始下标, 则[freeHead, SIZE)的范围内的对象全部属于自由表.用一个Object对象list表示链表头. 当从链表的任意位置删除元素时,比如下标为pos的元素,那么就让下标为pos和freeHead-1的元素互换在链表中的位置,然后删除互换后下标为freeHead-1的元素,也就相当于删除了互换前下标为pos的元素,这样一来,就可以保证所删除元素的位置始终是自由表头fr

链表之 头节点与尾指针 区别

单链表的必要条件:头节点的head,以及尾指针指向null: 1 头结点 首先,不要被以下三个词组弄混了: 链表头:数据内容为第一个元素的结点. 头指针:指向头结点元素的指针. 头结点:数据内容无效,其指针是头指针. 一句话描述为:头指针是指向头结点的指针,头结点是指向链表头的结点. 对于一个链表来说,头指针是一定存在的,是访问链表的入口,如果没有头指针则无法对其进行访问:链表头对于非空表来说是一定存在的,非空表则不存在. 2 尾指针 另外一种链表的技巧是使用尾指针. 尾指针是相对于头指针而言的

集合 和 数组 的区别

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