线性表的链式存储结构与顺序存储结构(链表和数组)的区别及优缺点
线性表的链式存储结构与顺序存储结构(链表和数组)的区别及优缺点
参照《大话数据结构》整理:
顺序存储结构:
优点:
- 无须为表示表中元素之间的逻辑关系而增加额外的存储空间
- 可以快速的存取表中任一位置的元素 O(1)
缺点:
- 插入和删除操作需要移动大量元素 O(n)
- 当线性表长度变化较大时,难以确定存储空间的容量
- 造成存储空间的“碎片”
二者对比
存储分配方式 | |
---|---|
顺序存储结构 | 用一段连续的存储单元依次存储线性表的数据元素 |
单链表 | 采用链式存储结构,用一组任意的存储单元存放线性表的元素 |
时间性能 | 查找 | 插入和删除 |
---|---|---|
顺序存储结构 | O(1) | 需要平均移动表长一半的元素 O(n) |
单链表 | O(n) | 在找出某位置的指针后,插入和删除的时间复杂度为 O(1) |
空间性能 | |
---|---|
顺序存储结构 | 需要预分配存储空间,分大了->浪费,分小了->易发生上溢 |
单链表 | 不需要分配存储空间,只要有就可以分配,元素个数也不受限制 |
适用场景:
- 数组: 元素个数变化不太大,需要频繁查找(存取),很少进行插入和删除操作时。
- 链表: 元素个数变化较大或者根本不知道有多大时,插入或删除数据频繁,
之前整理的,与前文意思相同,但上文更精炼 -> 以下可不看
区别:
(1)内存:数组静态分布内存,链表动态分布内存;
数组在内存中是连续的,链表不连续;
(2)复杂度:
①查找时:
数组利用索引定位,查找的时间复杂度是O(1),
链表通过遍历定位元素,查找的时间复杂度是O(n);
② 插入和删除:
数组插入和删除要移动其他元素, 时间复杂度是O(n),
链表的插入和删除不需要移动其他元素, 时间复杂度是O(1);
数组的优缺点:
(1)优点:
复杂度: 随机访问性比较强,可以通过下标进行快速定位。查找速度快
(2)缺点:
内存: ①会造成内存的浪费. 因为内存是连续的,所以在创建数组的时候必须规定其大小,如果不合适,就会造成内存的浪费。
②内存空间要求高. 创建一个数组,必须要有足够的连续内存空间。
③数组的大小是固定的,在创建数组的时候就已经规定好,不能动态拓展, 如果要扩容, 需要重新分配一块更大的空间, 再把所有数据全部复制过去.
复杂度: ④插入和删除的效率低,需要移动其他元素。
链表的优缺点:
(1)优点:
内存: ①内存利用率高,不会浪费内存,可以使用内存中细小的不连续的空间,只有在需要的时候才去创建空间。大小不固定,拓展很灵活。
复杂度: ②插入和删除的效率高,只需要改变指针的指向就可以进行插入和删除。
(2)缺点:
内存: ①由于每个元素必须存储指向前后元素位置的指针, 会消耗相对更多的存储空间.
复杂度: ②查找的效率低,因为链表是从第一个节点向后遍历查找。
线性表的链式存储结构与顺序存储结构(链表和数组)的区别及优缺点相关推荐
- 【数据结构 C描述】有两个整数集合 A 和 B 分别用两个线性表 LA 和 LB 表示,求:一个新的集合A=A∪B,A仍然为纯集合,线性表采用链式存储方式。【单链表】
这是我的作业题,作业写完后再附到博客中,可能代码写得很烂.虽然是C语言写的,但是我在其中加入了C++的写法,例如cout.我懒得写printf的格式控制符,所以用cout来输出内容,这样我感觉简便多了 ...
- 【数据结构】CH2 线性表的链式存储结构
目录 一.链表概述 1.相关定义 二.单链表 1.插入和删除节点的操作 (1)插入结点 (2)删除结点 2.建立单链表 (1)头插法 (2)尾插法 3.线性表基本运算在单链表中的实现 (1)初始化线性 ...
- 数据结构和算法:(3)3.2线性表的链式存储结构
线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...
- 链表list(链式存储结构实现)_5 线性表的链式存储结构
系列文章参考资料为<大话数据结构>,源码为个人私有,未经允许不得转载 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,可以使连续的,也可以不连续,也就意味这些元素可以 ...
- 从零开始学数据结构和算法(二)线性表的链式存储结构
链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...
- 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
- 数据结构开发(5):线性表的链式存储结构
0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? ...
- 线性表(链式存储结构)C语言
文章目录 一.线性表的链式存储结构 二.代码 1.头文件与宏定义: 2.对链表的定义及主要使用函数: 3.测试函数(主函数): 三.运行结果 一.线性表的链式存储结构 线性表的链式存储结构的特点是用一 ...
- Python 数据结构 之 线性表 的链式存储结构
用Python 来实现 C语言中 线性表的链式存储结构. 文章转载请注明: Python 数据结构 之 线性表 的链式存储结构 代码地址 https://github.com/WenkeZhou/P ...
最新文章
- 独家 | 带你入门比Python更高效的Numpy(附代码)
- 0040-如何重置Cloudera Manager的admin密码
- 使用mspaint查看图片像素
- python中输入提示_Python-Tkinter Text输入内容在界面显示的实例
- 【JAVASCRIPT】表单序列化问题
- 照看小猫(nowcoder 217602)
- 硅谷企業面臨新的反壟斷枷鎖
- 终于在2000年的联想6920上较完美的运行起了Gentoo Linux
- android 球形进度,android仿360手机卫士的自定义波浪球形进度View 滚动痕迹
- EXCEL技能之数据去重
- JavaScript 函数 对象 数组
- 惠普电脑安装Nvidia显卡驱动和cuda小记
- 服务器配置选择、域名选择、域名解析、域名绑定服务器,ICP免费备案等,此文档配置节约大量时间
- 25款国外优秀大气的UI界面设计欣赏
- Lagrange Multiplier Theorem——候选人定理
- 【07】概率图推断之信念传播
- 【秋招纪实录】一篇特别正经的【基恩士】求职经验分享
- 【C语言】如何安装 Visual studio 2022 ?
- 知识图谱构建——D2R的使用(二)
- [LeetCode]Buy and Sell Stocks 买卖股票问题
热门文章
- linux u盘读取速度,linux dd命令测试U盘读写速度
- C++ Opencv安装学习笔记
- 燃气灶电气线路图及原理_燃气灶工作原理及部件构造
- python itchat_Python itchat模块在微信上的
- AI 人工智能之概率论基础(概念总结和复习)
- 新手小白如何做自媒体自媒体入门视频教程(3G教程)
- Premiere 2020安装及Premiere缺失字体处理
- EtherCAT运动控制器的PLC编程(一) 直线插补
- 安装系统user服务器登录失败,win10系统开机提示user profile service服务器登录失败的解决方法...
- 中联医疗系统服务器,中联电子病历系统(ZLEMR)