顺序表和链表的比较

news2025/2/25 8:15:27

本文主要内容:从存取方式、逻辑/物理结构、查找/插入/删除操作和空间分配的角度比较顺序表和链表,并从存储、运算、环境的角度对比应如何选取存储结构。

目录

  • 一、顺序表和链表的比较
    • 1、存取(读写)方式
    • 2、逻辑/物理结构
    • 3、查找、插入、删除操作
    • 4、空间分配
  • 二、存储结构的选取
    • 1、基于存储的考虑
    • 2、基于运算的考虑
    • 3、基于环境的考虑

一、顺序表和链表的比较

顺序表和链表的比较

1、存取(读写)方式

顺序表可以顺序存取也可以随机存取,链表只能从表头顺序存取元素。例如在第i个位置上执行存或取得操作,顺序表仅需一次访问,而链表需从表头开始一次访问i次。

2、逻辑/物理结构

采用顺序存储时,逻辑上相邻的元素,对应的物理存储位置也相邻。而采用链式存储时,逻辑上相邻的元素,物理存储位置不一定相邻,对应的逻辑关系是通过指针链表来表示的。

3、查找、插入、删除操作

对于按值查找,顺序表无序时,两者的时间复杂度均为O(n);顺序表有序时,可采用折半查找,时间复杂度为O(log2 n).

对于按序号查找,顺序表支持随机访问,时间复杂度为O(1)。而链表的平均时间复杂度为O(n)。顺序表的插入、删除操作,平均需要移动半个表长的元素。链表的插入、删除操作,只需修改相关结点的指针域即可。(链表的每个结点都带有指针域,存储密度相对于顺序表小)

4、空间分配

顺序存储在静态存储分配情形下,一旦存储空间装满就不能扩充,若再加入新元素,会出现内存溢出,因此需要预先分配足够大的存储空间(需要事先预估需要占用的存储空间大小)。但预先分配过大,可能会导致顺序表后部大量闲置。动态存储分配虽然存储空间可以扩充,但需要移动大量元素,导致操作效率降低,并且若内存中没有更大块的连续存储空间,则会导致分配失败。

链式存储的结点空间只在需要时申请分配,只要内存有空间就可以分配。操作灵活高效。

二、存储结构的选取

存储结构的选取

1、基于存储的考虑

难以估计线性表的长度或存储规模时,使用不用事先估计存储规模的链表。

2、基于运算的考虑

若经常做的运算是按序号访问数据元素,顺序表优于链表;若经常做的运算时插入/删除元素,链表优于线性表。

3、基于环境的考虑

线性表容易实现,所有的高级语言中均有数组类型;链表的操作是基于指针的,不是所有的高级语言中都含有指针类型(若想在没有指针类型的高级语言中使用链表结构,可使用静态链表实现链表)。

总结:两种存储结构各有所长。通常较稳定的线性表选择顺序存储,而频繁进行插入、删除操作的线性表(即“动态”的线性表)宜选择链式存储。

本文内容为个人学习总结所得,如有问题欢迎交流、指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/618823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI人工智能领域精美绘图模板分享

1 人工智能的发展历程 如今人工智能的应用渗透了我们生活的方方面面,我们都知道人工智能的前景十分光明,在未来对于推进人类发展进程也是非常重要的,但其实人工智能的发展道路是极其曲折的,下面就将人工智能的发展历程分为如下六…

arcgis for javascript TileLayer 自定义高德地图图层

效果如图: 一、创建自定义切片层 要创建自定义图块层,您必须调用BaseTileLayer类的createSubclass()方法。命名自定义层为TintLayer 由于这一层需要知道在哪里访问预定义的图块,我们将创建一个属性。应用程序将为图层提供值,图…

全球首发 《NGINX 完全指南》中文版

原文作者:Derek DeJonghe of F5 原文链接:全球首发 | 《NGINX 完全指南》中文版 转载来源:NGINX 开源社区 NGINX唯一中文官方社区 ,尽在nginx.org.cn 在社区小伙伴们的催促下,我们很高兴地与大家分享这个好消息&#…

关于阵列发射端的波束形成(相控阵)研究与仿真实践

说明 相控阵是一个很大的话题,相控阵说得直白一点就是通过控制天线阵列中各个天线的相位来使得波束指向我们想要的方向。现阶段相控阵雷达用得更多的还是军事领域,不过随着技术的进步、成本的下降以及小型化,相控阵雷达也逐渐被用于民用领域了…

Python之Gradio简单使用

目录 安装Gradio示例用法应用界面1. gr.Interface2. gr.Blocks Gradio的输入和输出组件输入组件(Inputs)输出组件(Outputs) 其他 Gradio是一个Python库,用于构建快速的Web界面,以便于使用机器学习模型进行实…

Vue.js 中的 watch 属性详解

Vue.js 中的 watch 属性详解 在 Vue.js 中,watch 属性是一种非常重要的属性,它可以监听 Vue 实例中指定的数据变化,并在数据发生变化时执行相应的操作。本文将对 Vue.js 中的 watch 属性进行详细的介绍,并附上相关的代码示例。 什…

一文看穿 TypeScript 的庐山真面目

导语: 在了解 TypeScript 之前,我们需要了解 什么是强类型语言和什么是弱类型语言,以及什么是静态类型,什么又是动态类型。 强类型不允许任意的隐式类型转换,而 弱类型 允许静态类型:一个变量声明时它的类型…

基于Python的大数据舆情分析,舆论情感分析可视化系统

运行效果图 基于Python的微博大数据舆情分析,舆论情感分析可视化系统 系统介绍 微博舆情分析系统,项目后端分爬虫模块、数据分析模块、数据存储模块、业务逻辑模块组成。 先后进行了数据获取和筛选存储,对存储后的数据库数据进行提取分析处…

sqlmap -os-shell 使用方法

一、burp suite抓包。 如上图所示,红框处很明显是一个传参点,我们就在这个页面抓包。 抓到包之后将内容保存到桌面的1000.txt文件下。 二、sqlmap跑包。 打开sqlmap跑包。 python sqlmap.py -r C:\Users\16434\Desktop\1000.txt -dbmsmysql --os-shell…

Oracle-catalog影响归档量统计

有个12.2 rac环境报警备份异常,登录检查备份,发现报错日志 piece handle/backup/orcl/archbackup/ARCHBAK_ORCL_20230607_738_1 tagARCH_BAK commentNONE channel d1: backup set complete, elapsed time: 00:01:55 released channel: d1 RMAN-00571: …

从Vuex过渡到pinia

Vuex过渡到Pinia 众所周知,Vuex是一个状态管理库,它方便了我们任何组件不用考虑关系就可以共享一个全局的状态。😃但是 Vuex也有它一定的缺陷。主要缺点,我总结如下: mutations里面不能写异步函数,否则就…

Simulink仿真模块 - Waveform Generator

Waveform Generator模块的功能是使用信号符号输出波形。它所在的库为: Simulink / Sources 如图所示: 双击模型弹出如下对话框,如图所示: Waveform Generator 模块根据您在波形定义表中输入的信号符号输出波形。 此模块支持下列用于信号符号的语法: 函数…

STM32单片机OLED语音识别路灯台灯控制系统人检测亮度调节

实践制作DIY- GC0143-OLED语音识别路灯台灯控制系统 基于STM32单片机设计---OLED语音识别路灯台灯控制系统 二、功能介绍: 电路:STM32F103C系列最小系统串口语音识别模块LED灯板1个红外传感器OLED显示器1个手动自动模式键1个开关按键 1.有两个模式1个手…

速卖通,国际站,temu测评,补单策略:安全与效能并重,提高账号存活率

测评能够帮助卖家让亚马逊平台更喜欢自己的产品,给予更好排名的同时也让后续进入店铺的买家更容易认可自己的产品。这些真实评价在亚马逊卖家管理系统中被称为Review Feedback。这是进行真实交易后形成的评价,而不是通过机器软件生成,形成虚拟…

SpringData进阶篇-下

SpringData进阶篇 一:故事背景二:自定义操作2.1 JPQL和SQL2.1.1 接口内定义2.1.2 调用2.2.3 SQL 方式查询 2.2 规定方法名2.2.1 普通查询规则2.2.2 修饰查询 2.3 Query By Example2.3.1 Repository继承QueryByExampleExecutor2.3.2 具体使用2.3.2 Exampl…

Aspose.Words功能演示:使用 C# 从 Word 文档中读取宏

Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…

java-不借用三方程序情况下,使用java自动工具将可执行jar转成exe

一、先新建一个javafx项目 二、配置Artifacts 点击Artifacts,会看到新建的项目会自动创建好了 如果没有的话,可以手动创建如下操作 三、配置 按下图逐一配置即可 四、builde 5、使用java的打包命令打包 PS C:\Users\xx\Downloads\cc\exeex\out\artifacts\JavaFXApp>…

web前端 --- js事件

js事件(event) (js诞生就是基于事件驱动型编程) (1)事件 用户通过各种行为(按键、鼠标点击、鼠标hover......)行为动作,引起相关 js 代码的执行。 事件的三元素&#x…

多篇论文入选ICASSP 2023 火山语音有效解决多类实践问题

近日由IEEE主办、被誉为世界范围内最大规模、也是最全面的信号处理及其应用方面的顶级学术会议ICASSP2023于希腊召开,该会议具有权威、广泛的学界以及工业界影响力,备受AI领域多方关注。会上火山语音多篇论文被接收并发表,内容涵盖众多前沿领…

springboot+vue+java企业车间工位管理系统

。本文介绍了企业级工位管理系统的开发全过程。通过分析企业级工位管理系统管理的不足,创建了一个计算机管理企业级工位管理系统的方案。文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和…