百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

数据结构线性表(一)

haoteby 2025-01-01 20:06 2 浏览

一、什么是线性表

1、基本概念

线性表是具有相同特性的数据元素的一个有限序列。

所有数据元素类型相同。

线性表是有限个数据元素构成的。

线性表中数据元素与位置相关,即每个数据元素有唯一的序号。

线性表中每个元素ai的唯一位置通过序号或者索引i表示,为了算法设计方便,将逻辑序号和存储序号统一,均假设从0开始,这样含n个元素的线性表的元素序号i满足0≤in-1。

2、线性表的抽象数据类型描述

3、线性表的顺序存储结构

(1)线性表的顺序存储结构—顺序表

data数组存放线性表元素

data数组的容量(存放最多的元素个数)为capacity。

线性表中实际数据元素个数size

(2)线性表基本运算算法在顺序表中的实现

在动态分配顺序表的空间时,初始容量设置为initcapacity,当添加或者插入元素可能需要扩大容量,在删除元素时可能需要减少容量。

整体建立顺序表:由含若干个元素的数组a的全部元素整体创建顺序表,即依次将a中的元素添加到data数组的末尾,当出现上溢出时按实际元素个数size的两倍扩大容量。

顺序表基本运算算法

将元素e添加的线性表末尾Add(e)

求线性表的长度getsize()

求线性表中序号为i的元素GetElem(i)

设置线性表中序号为i的元素SetElem(i,e)

求线性表中第一个值为e的元素的逻辑序号GetNo(e)

在线性表中插入e作为第i个元素Insert(ie)


扩容运算resize()在n次插入中仅仅调用一次,其平摊时间为O(1),上述算法时间分析中可以忽略它。


在线性表中删除第i个数据元素Delete(i)

输出线性表所有元素display()

4、顺序表的应用算法设计示例

(1)基于顺序表基本操作的算法设计

练习1:对于含有n个整数元素的顺序表L,设计一个算法将其中所有元素逆置。

例如L=(1,2,3,4,5),逆置后L=(5,4,3,2,1)。并给出算法的时间复杂度和空间复杂度。

练习2:假设有一个整数顺序表L,设计一个算法用于删除从序号i开始的k个元素。

例如L=(1,2,3,4,5),删除i=1开始的k=2个元素后L=(1,4,5)。

(2)基于整体建立顺序表的算法设计

练习3:对于含有n个整数元素的顺序表L,设计一个算法用于删除其中所有值为x的元素。

例如L=(1,2,1,5,1),若x=1,删除后L=(2,5)。并给出算法的时间复杂度和空间复杂度。

(3)有序顺序表的算法设计

有序表是指按元素值或者某属性值递增或者递减排列的线性表,有序表是线性表的一个子集。

有序顺序表是有序表的顺序存储结构。

对于有序表可以利用其元素的有序性提高相关算法的效率,二路归并就是有序表的一种经典算法。

练习:有两个按元素值递增有序的整数顺序表A和B,设计一个算法将顺序表A和B的全部元素合并到一个递增有序顺序表C中。并给出算法的时间复杂度和空间复杂度。

二路归并:

算法中尽管有多个while循环语句,但恰好对顺序表A、B中每个元素均访问一次,所以时间复杂度为O(n+m) 。

算法中需要在临时顺序表C中添加n+m个元素,所以算法的空间复杂度也是O(n+m)。

二路归并中,若两个有序表的长度分别为nm,算法的主要时间花费在元素比较上,那么比较次数是多少呢?

最好的情况下,整个归并中仅仅是较长表的第一个元素与较短表每个元素比较一次,此时元素比较次数为MIN(n,m)(为最少元素比较次数),如A=(1,2,3),B=(4,5,6,7,8),只需比较3次。

最坏的情况下,这n+m个元素均两两比较一次,比较次数为n+m-1(为最多元素比较次数),如A=(1,3,5,7),B=(2,4,6),需要比较6次。

相关推荐

「乌龟」龟壳对比了几款伤害统计插件,最好用的是它?

乌龟服伤害统计插件虽然我们熟悉的Details和Recount,在乌龟服暂时没有很好的迁移,...

「听风」WOW网易有爱整合插件功能拆解(上)

魔兽小伙伴使用的怀旧服插件一般为大脚、网易有爱、ElvUI等,昨天将大脚整合包插件梳理之后发现插件清晰好多,虽然有些界面还是找不到设置方法,需要花些时间逐个看一下。网易有爱考虑到有一大部小伙伴使用网易...

教你使用iOS8插件iVeency 让电脑控制你的iPhone

【搞科技教程】iOS8越狱后安装什么插件好?对于一些高玩越狱族来说,他们一直在期待着远程监控插件Veency的更新,在昨日,Cydia之父终于放出了Veency的更新。此次更新支持iOS8完美越狱。来...

宝塔面板安全软件/插件有哪些?(宝塔面板5.9 安装命令)

许多新手站长在选择服务器管理面板的时候都会考虑包含哪些安全插件。对于安装宝塔Linux面板作为服务器管理软件的用户。建议使用宝塔自带的安全软件。一、免费使用...

Chrome和火狐插件让数以百万计用户隐私数据泄露

7月21日消息,流行浏览器诸如广告拦截等扩展功能,已经遭利用而让数以百万计使用Chrome和火狐(Firefox)的消费者个人数据泄露。遭遇泄露的这些个人数据,不仅涉及他们的浏览历史,而且还包括他们存...

如何使用Elasticsearch插件改进性能

撰写:PierrePoitevin,高级软件工程师|DanielGeng,软件工程师|萧湖李,工程经理(第一部分)问题TinderEng团队最近一直在致力于将机器学习(ML)算法集成到Tind...

RL必备插件:ERT--游戏内的战斗分析插件

ExorsusRaidTools插件介绍ExorsusRaidTools(以下简称ERT)是来自EUHowlingFjord服务器的Exorsus(NGA俗称3K3)公会开发的一款功能非...

魔兽世界7.0军团再临 多功能姓名版插件推荐

关键词>>魔兽世界,插件,姓名版,血条,wow魔兽世界7.0军团再临多功能姓名版插件推荐看着新版姓名版不习惯?来看看这款Kui_Nameplates姓名版插件吧!还带技能监视功能哟!K...

DTU配电自动化站所终端通讯接口有哪些 主控单元可配置多少插件?

世东电气HS-6302/DTU配电自动化站所终端通讯接口:...

魔兽世界:毒蛇神殿踏潮者很难?5张图教你学会如何通关

作为一个最会画画的魔兽世界辣鸡小编,我今天又来分享技术贴了。我们继续用图文并茂...

Aliexpress速卖通销量监控和一键复制运费模板Chrome插件v0.1

发现一个很强大的速卖通插件,支持所有速卖通产品的5天销量监控和一键复制运费模板功能,地址:https://github.com/YouthCodeChen/Aliexpress-Plugin...

魔兽世界boss技能提示?魔兽世界DBM插件?

魔兽世界boss技能提示可以通过使用DBM插件来实现,DBM是一款老牌首领报警插件。DBM的主要主要功能包括:包含所有团队级首领的警报模块;一些模块具有强大的功能,比如洛欧塞布的治疗者监视器,该功能允...

老学长分享10个最强chrome浏览器插件!瞬间开发效率棒棒哒

今天老学长给大家推荐几款超强大的谷歌插件!用过都说好!1、Tampermonkey(油猴插件)Tampermonkey(油猴脚本)是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于Chro...

电脑浏览器无法安装控件问题的解决办法

前几天碰到一个监控设备在浏览器浏览时无法找到控件的问题,调整了好几次才改好,所以今天就来分享一下这个问题的解决办法。电脑在日常生活和办公中有可能需要下载安装一些特殊的控件,比如监控软件和各个银行的登录...

waves11:盘点waves的Meters表类插件

俗话说:混音就是"听,不要去看"。作为一门关于声音的艺术,混音的全部内容都关于听的。尽管如此,我们依然能够在混音场所中见到各种仪表,而它们的存在有其然的原因。仪表可以用在混音的很多阶段...