链表用途&&数组效率&&链表效率&&链表优缺点
三大数据结构的实现方式
| 数据结构 | 实现方式 |
| 栈 | 数组/单链表 |
| 队列 | 数组/双端链表 |
| 优先级队列 | 数组/堆/有序链表 |
| 双端队列 | 双向链表 |
数组与链表实现方式的比较
数组与链表都很快
如果能精确预测栈或者队列所需要容纳的数据量 --- 数组
如果不能 --- 链表
数组的效率
|
|
无序数组 |
有序数组 |
|
查找 |
比较次数O(N) |
比较次数O(logN)<—二分查找 |
|
插入 |
O(1) |
比较次数O(N) |
|
|
移动次数MaxO(N) |
|
|
删除 |
比较次数O(N) |
比较次数O(logN) |
|
|
移动次数MaxO(N) |
移动次数MaxO(N) |
链表的效率
|
单链表 |
双端链表 |
有序链表 |
双向链表 |
|
|
头插 |
O(1) |
O(1) |
||
|
头删 |
O(1) |
O(1) |
||
|
尾插 |
O(1) |
O(1) |
||
|
尾删 |
O(N) |
O(1) |
||
|
插入 |
Max O(N) | Min O(N/2) |
|||
|
删除 |
O(1) |
|||
|
查找结点 |
O(N) 次比较 无移动次数 |
|||
|
删除结点 |
O(N) 次比较 无移动次数 |
O(N) – deleteKey(int i) |
||
|
指定结点后插入 |
O(N) 次比较 无移动次数 |
O(N) – insertAfter(int i) |
链表优点
l 使用内存无限制 可以扩展到所有可以使用的内存
数组大小在创建的时候 就固定了经常由于数组太大 导致效率低下 或者数组太小导致空间溢出
l 插入删除结点的时候 链表不需要任何移动 特别是复制时间远远大于比较时间的时候
双向链表
优点:
前向遍历
后向遍历
缺点:
每次插入或者删除一个链结点时候 需要处理四个连结点的引用(2个连接前一个链结点 两个链接后一个)由于多了两个引用 连结点占用的空间也变大了
链表用途&&数组效率&&链表效率&&链表优缺点的更多相关文章
- java中链表和数组的区别?
综述:数组是线性结构,可以直接索引,即要去第i个元素,a[i]即可.链表也是线性结构,要取第i个元素,只需用指针往后遍历i次就可.貌似链表比数组还要麻烦些,而且效率低些. 想到这些相同处中的一些细微的 ...
- 数组、ArrayList、链表、LinkedList
数组 数组 数组类型 不可重复 无序(线性查找) 可重复(找到第一个即可) 无序(线性查找) 不可重复 有序(二分查找) 可重复(找到第一个即可) 有序(二分查找) 插入 O(N) O(1) O( ...
- 剑指offer-第二章数据结构(数组,字符串,链表,树,栈与队列)及例题
一.数组(最简单的数据结构) 定义:占据一块连续内存并按照顺序存储数据.创建时先指定大小,分配内存. 优点:时间效率高.实现简单的hash(下标为key,对应的数据为value) 缺点:空间效率差.如 ...
- 对象数组、集合、链表(java基础知识十五)
1.对象数组的概述和使用 * 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息. Student[] arr = new Student[5]; //存储学生 ...
- 用链表和数组实现HASH表,几种碰撞冲突解决方法
Hash算法中要解决一个碰撞冲突的办法,后文中描述了几种解决方法.下面代码中用的是链式地址法,就是用链表和数组实现HASH表. he/*hash table max size*/ #define HA ...
- "《算法导论》之‘线性表’":基于数组实现的单链表
对于单链表,我们大多时候会用指针来实现(可参考基于指针实现的单链表).现在我们就来看看怎么用数组来实现单链表. 1. 定义单链表中结点的数据结构 typedef int ElementType; cl ...
- [算法]合并链表&删除数组重复项
合并链表 题目 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1-> ...
- 线性结构和非线性结构、稀疏数组、队列、链表(LinkedList)
一.线性结构和非线性结构 线性结构: 1)线性绪构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺 ...
- C语言 链表的使用(链表的增删查改,链表逆转,链表排序)
//链表的使用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include< ...
随机推荐
- 烦人的IE7、8,半透明滤镜(filter:alpha)失效、png半透明失效的解决办法
在项目中的问题,之前用的是用IETest测试IE7,8发现背景透明设置无效,后来找文章解决!看了一些资料,做下总结. 几种IE半透明CSS样式 IE8里可以这样写 -ms-filter:”progid ...
- P2889 [USACO07NOV]挤奶的时间Milking Time
P2889 [USACO07NOV]挤奶的时间Milking Time 奶牛Bessie在0~N时间段产奶.农夫约翰有M个时间段可以挤奶,时间段f,t内Bessie能挤到的牛奶量e.奶牛产奶后需要休息 ...
- bzoj千题计划198:bzoj1084: [SCOI2005]最大子矩阵
http://www.lydsy.com/JudgeOnline/problem.php?id=1084 m=1: dp[i][j] 前i个数,选了j个矩阵的最大和 第i个不选:由dp[i-1][j] ...
- Java面试题系列(二)Java内存模型
在进行Java编程时,我们通常需要通过new创建一个对象的实例.就比如有一个People的类,那么创建一个People的实例:People w_people = new People(); 此时,ne ...
- 20155202 2016-2017-2 《Java程序设计》第5周学习总结
20155202 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章:异常处理 java中所有错误会包装成对象,可以尝试(try)执行程序并捕捉(catc ...
- 运算符,比如+, -, >, <, 以及下标引用[start:end]等等,从根本上都是定义在类内部的方法。
python解释器在碰到+号运算符时,会调用加号前面的对象的__add__方法 class a: def __add__(self,b): print "ghh" aa=a() a ...
- JavaScript——创建对象
<script type="text/javascript"> //声明变量的首字母是小写 //1.对象字面量 /*var person = { name:" ...
- 001_软件waf
一.优秀的软件waf开源软件 <1>openwaf介绍 http://www.oschina.net/p/openwaf http://git.oschina.net/miracleqi ...
- mysql5.7.20:安装教程
从mysql官网下载安装包:/mysql-5.7.20-linuxglibc2.12-x86_64.tar.gz #切换目录 cd /usr/local #解压下载的安装包 tar -zxvf /so ...
- 前端JavaScript高级面试笔记
一.ES6 1.模块化 ES6通过export和import实现模块化 ES6的模块化的基本规则或特点, 欢迎补充: 1:每一个模块只加载一次, 每一个JS只执行一次, 如果下次再去加载同目录下同文件 ...