链表用途&&数组效率&&链表效率&&链表优缺点
三大数据结构的实现方式
| 数据结构 | 实现方式 |
| 栈 | 数组/单链表 |
| 队列 | 数组/双端链表 |
| 优先级队列 | 数组/堆/有序链表 |
| 双端队列 | 双向链表 |
数组与链表实现方式的比较
数组与链表都很快
如果能精确预测栈或者队列所需要容纳的数据量 --- 数组
如果不能 --- 链表
数组的效率
|
|
无序数组 |
有序数组 |
|
查找 |
比较次数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< ...
随机推荐
- 20145215卢肖明《网络对抗》逆向及Bof基础
20145215卢肖明<网络对抗>逆向及Bof基础 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...
- 【CSS】clear清除浮动
clear清除浮动1.作用: 规定元素的某一侧不允许存在浮动元素 2.值: 3.应用: 清除其他浮动元素对其产生的影响 <!DOCTYPE html> <html lang=&quo ...
- axios 参数拼接
// 加载列表 getData () { this.$http .get("platform-framework/stucgbb/selectCHBBInit?type="+thi ...
- Spring RedisTemplate操作-List操作(4)
@Autowired @Resource(name="redisTemplate") private RedisTemplate<String, String> rt; ...
- 使用JWPL (Java Wikipedia Library)操作维基百科数据
使用JWPL (Java Wikipedia Library)操作维基百科数据 1. JWPL介绍 JWPL(Java Wikipedia Library)是一个开源的访问wikipeida数据的Ja ...
- ASP.NET乱码深度剖析
写在前面 在Web开发中,乱码应该算一个常客了.今天还好好的一个页面,第二天过来打开一看,中文字符全变“外星文”了.有时为了解决这样的问题,需要花上很长的时间去调试,直至抓狂,笔者也曾经历过这样的时期 ...
- thinkphp5学习总结!
数据库操作之原生sql操作 <?php namespace app\index\controller; use think\Db; class Index { public function i ...
- flask基础之session原理详解(十)
前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...
- php如何优雅地把数组传递给前端js脚本?
比如说http://echarts.baidu.com/demo...这个例子中,一般里面的timeData数组都是数据库的所有记录的单独某一个列的集合,而例子中第149行的 data:[ 1,2,3 ...
- jquery-扩展
jQuery扩展三种方式:$.extend,$.fn.extend,外部文件. 1)jQuery.extend(object) 调用 $.方法 2)jQuery.fn.extend(object) ...