数组和链表的增删改查速度比较
数组查询快,增删慢
链表增删快,查询慢
首先我们要知道什么是数组什么是链表,数组和链表都有什么特点,那么这道题才好解答,数组是有序的元素序列,是多个相同类型数据的组合,而链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
数组和链表的特点是什么
数组的特点是
1.数组是相同数据类型的元素的集合。
2.数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
3.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
链表的特点是
线性表的链式存储表示的特点是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素 与其直接后继数据元素之间的逻辑关系,对数据元素来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。由这两部分信息组成一个结点,表示线性表中一个数据元素
因为顺序存储符合连续的内存,在找到数组后,由于是顺序存储可以直接找数据,所以数组可以被缓存处理,而链接存储并不是连续的,分散在堆中,他需要每次都从头开始找,利用每一个结点去找下一个结点比较慢,所以只能内存去处理。
所以数组查询比链表要快。
但是数组的增删改慢,而数组大小固定,所以在插入和删除元素的时候,需要先找到数组中要插入的位置,然后需要将里面的元素移动,在插入进去,所以每次都需要移动元素,链表可以动态扩充,插入删除不需要移动元素,只需要找到我们要插入位置后,更改元素中的指针就可以了。所以链表的插入删除比数组效率高。
还要注意链表有单链表和双链表之分单链表只有一个指向下一结点的指针,也就是只能next
双链表除了有一个指向下一结点的指针外,还有一个指向前一结点的指针,可以通过prev()快速找到前一结点,顾名思义,单链表只能单向读取
Java中典型应用数组和链表的就是ArrayList底层是数组, LinkedList 底层是链表实现的
数组和链表的增删改查速度比较相关推荐
- C语言 单链表的增删改查
单链表的增删改查 目录 单链表的增删改查 链表的创建和输出(有头结点) 链表的查找 链表的删除 链表的修改 链表是一种最常见地采用动态存储分配方式的数据结构,相较于数组而言它更加灵活. 单链表的特点 ...
- 通用版!完整代码,单链表SingleLinkedList增删改查,反转,逆序,有效数据等Java实现
文章目录 节点类 链表类(主要) 测试类 小结 节点类 可以根据需要,对节点属性进行修改.注意重写toString()方法,以便后续的输出操作. //节点类 class Node {public in ...
- 单链表实现增删改查(含头结点)
** 单链表实现增删改查(含头结点) ** **## 单链表** package com.Linked;public class HeadLinked {public String name;// 链 ...
- 2020-12-13# **链表的增删改查,逆置**
链表的增删改查,逆置,长度,排序,是否为空 1.``准备阶段## ## # include<stdio.h> # include<stdlib.h>typedef struct ...
- 带头节点单链表的增删改查
单链表有很多结构循环单链表,有头节点的单链表,无头节点的单链表,双节点单链表,以下源码是以有一个头节点的单链表为例写的增删改查的各种功能,就是下图 然后各个注释也在函数后面写着,这玩意确实还挺难,源码 ...
- java单链表 提供增删改查_java实现单链表增删改查的实例代码详解
package 数据结构算法.链表; /* *定义节点 * 链表由节点构成 */ public class node { private e e; //数据data private node next ...
- 单链表实现增删改查(进化版)
主函数: 链表.cpp #include <bits/stdc++.h> #include "List.cpp" using namespace std; int ma ...
- Java 数据结构(链表LinkedList增删改查、数组Vector、获取Vector最大值、交换Vector两成员位置、栈的实现、压栈出栈实现反转、队列Queue)
在链表(LinkedList)的开头和结尾添加元素 import java.util.LinkedList;public class Main {public static void main(Str ...
- go 语言 链表 的增删改查
上一篇写了如何来生成链表,这一篇介绍链表的基本操作. 1.求表长 表长就是链表中结点的个数 type Teacher struct{ //定义链表类型Name stringAge intNext *T ...
最新文章
- spark-submit提交python脚本过程记录
- 成功解决ModuleNotFoundError: No module named 'torchvision.ops'
- CSS样式优先级与权重计算方式
- SpringCloud教程-分布式配置中心Config (SpringCloud版本Greenwich.SR4)
- 互联网日报 | 爱奇艺会员宣布11月13日起涨价;淘宝特价版月活用户破7000万;我国成功发射一箭十三星...
- Python 多线程总结
- 网络诈骗是大数据的“原罪”吗
- 还是原来的配方和味道!《英雄联盟》手游界面再曝光...
- es6 字符串模板 随手记
- php字符串操作整理,《PHP字符串操作》收集整理
- gcc/g++使用及gdb调试新手入门
- JUnit测试提示java.lang.Exception: No runnable methods
- docker 安装mysql,不区分大小写配置
- 【Machine Learning】使用随机森林进行特征选择
- 织梦DedeCMS管理员动态密码登录插件下载
- 【企业】见相非相,即见如来
- [Professor麦]并发编程就该这么学(长文预警)
- matlab 绘图常用命令
- 企业管理软件使用心得独家分享
- 国产防盗版加密芯片安全性分析