数据结构与算法之————————线性表①顺序表

news/2024/5/20 10:05:05 标签: 数据结构与算法, 顺序表

1、顺序表的两种基本形式(其查找元素的时间复杂度是O(1))

 

图a表示的是顺序表的基本形式,数据元素本身连续存储,每个元素所占的存储单元大小固定相同,元素的下标是其逻辑地址,而元素存储的物理地址(实际内存地址)可以通过存储区的起始地址Loc (e0)加上逻辑地址(第i个元素)与存储单元大小(c)的乘积计算而得,即:

Loc(ei) = Loc(e0) + c*i

故,访问指定元素时无需从头遍历,通过计算便可获得对应地址,其时间复杂度为O(1)。

如果元素的大小不统一,则须采用图b的元素外置的形式,将实际数据元素另行存储,而顺序表中各单元位置保存对应元素的地址信息(即链接)。由于每个链接所需的存储量相同,通过上述公式,可以计算出元素链接的存储位置,而后顺着链接找到实际存储的数据元素。注意,图b中的c不再是数据元素的大小,而是存储一个链接地址所需的存储量,这个量通常很小。

图b这样的顺序表也被称为对实际数据的索引,这是最简单的索引结构。

2、顺序表的操作

1)增加元素

如图所示,为顺序表添加新元素111的三种方式

 

a. 尾端加入元素,时间复杂度为O(1)

b. 非保序的加入元素(不常见),时间复杂度为O(1)

c. 保序的元素加入,时间复杂度为O(n)

2)、删除元素

a. 删除表尾元素,时间复杂度为O(1)

b. 非保序的元素删除(不常见),时间复杂度为O(1)

c. 保序的元素删除,时间复杂度为O(n)

 


http://www.niftyadmin.cn/n/1587806.html

相关文章

Gradle 构建脚本基础

Setting 文件 Setting文件大多是为了配置子工程,一个根工程可以包含多个Module也就是子工程,子工程只有在Setting文件里配置类Gradl才会识别,才会在构建的时候被包含进去 Build文件 每个Project都会有一个Build文件,该文件是pr…

在微信网页版下用Chrome控制台发送消息

之前没仔细研究过微信网页版&#xff0c;今天才发现它的前端是用AngularJS做的。的确&#xff0c;这么复杂且典型的One-Page-One-Application应用是必须得用前端框架才行了。 微信的HTML代码质量狠高&#xff0c;所有的消息内容都在<pre>这个标签下&#xff0c;最后一个&…

Gradle 命令操作

常规操作 – 使用帮助 Gradle Wrapper帮助命令行 ./gradlew -? ./gradlew -h ./gradlew -help查看所有可执行的Tasks ./gradlew tasks // 会以分组的形式列出所有的Task列表Gradle Help任务 ./gradlew help --task //显示tasks任务的帮助信息&#xff1a;类型、分组信息、可…

数据结构与算法之——————————线性表②链表之单向链表

单向链表 单向链表也叫单链表&#xff0c;是链表中最简单的一种形式&#xff0c;它的每个节点包含两个域&#xff0c;一个信息域&#xff08;元素域&#xff09;和一个链接域。这个链接指向链表中的下一个节点&#xff0c;而最后一个节点的链接域则指向一个空值。 表元素域ele…

【线上直播】《政务大数据治理》

分享讲师&#xff1a;马玉玺讲师简介&#xff1a;大数据业务专家。现任职深圳华傲数据高级项目负责人&#xff0c;高级技术经理&#xff0c;负责大数据项目管理及大数据业务架构。近8年大数据开发经验&#xff0c;5年大数据项目管理经验。对Spark、hadoop等有很深的研究以及丰富…

Android 使用Navigation 跳转页面时发生crash

crash问题日志 Fatal Exception: java.lang.IllegalArgumentException navigation destination com.xxx.yyy:id/action_aFragment_to_bFragment is unknown to this NavController 解决 // 在执行跳转语句之前使用下面方法对当前fragment 进行判断 if (Navigation.findNavCo…

django中celery的配置及使用

celery 涉及到三个东西&#xff1a;异步的项目、worker&#xff08;执行异步任务的进程&#xff0c;其作用是从redis中获取异步任务并执行&#xff09;、broker&#xff08;代理人&#xff0c;这里用redis做broker&#xff0c;其作用是将需要执行异步或定时任务添加到redis队列…

基于Dynomite的分布式延迟队列

2019独角兽企业重金招聘Python工程师标准>>> 在Netflix的平台上运行着许多的业务流程&#xff0c;这些流程的任务是通过异步编排进行驱动&#xff0c;现在我们要实现一个分布式延迟队列&#xff0c;这个延迟队列具有如下特点&#xff1a; 分布式不用外部的锁机制高并…