【数据结构】线性表的顺序表示(顺序表的定义和基本操作)

计算机考研408-数据结构笔记本之——第二章 线性表

2.2 线性表的顺序表示(顺序表的定义和基本操作:初始化/插入/删除/查找)

2.2.1 顺序表的定义

1.定义

        顺序表是线性表的顺序存储

        所谓顺序存储,就是把逻辑上相邻的元素存储在物理位置上相邻的存储单元中,元素间的关系由存储单元的邻接关系来体现。

2.实现

        顺序表中的任意一个数据元素都可以随机存取。通常用数组来描述线性表的顺序存储结构。数组可以是静态分配的,也可以是动态分配的.

        注意线性表中元素位序从1开始,而数组中元素下标从0开始。

        假定线性表的元素类型为ElemType

        1)静态分配(存储数组空间和内存固定)

        静态分配的顺序表存储结构描述为:

        

        2)动态分配(存储数组分配空间大小在运行时动态决定)

        

3.特点

2.2.2 顺序表的初始化

静态分配:

        静态分配在声明一个顺序表时,就已经为其分配了数组空间,因此初始化时只需将顺序表的当前长度设为0。

//静态分配初始化//SqList L;				//声明一个顺序表 void InitSize(SeqList &L){	L.length = 0;			//顺序表初始长度为0 } 

动态分配:

        动态分配的初始化为顺序表分配一个预定义大小的数组空间,并将顺序表的当前长度设为0.MaxSize指顺序表当前分配的存储空间大小,一旦因为插入元素而空间不足,就再进行分配.

//动态分配初始化//SqList L;				//声明一个顺序表 void InitSize(SeqList &L){L.data = (ElemType *)malloc(sizeof(ElemType)*Initsize);		//分配存储空间 L.length = 0;			//顺序表初始长度为0L.MaxSzie = InitSize;	//初始存储容量 } 

2.2.2 顺序表的插入(O(n))

        在顺序表L的第i个位置插入新元素e: ListInsert(&L,i,e);

        若i不合法(不在1 <= i <= L.length + 1范围内),返回False,插入失败;

        若i合法,将第i个元素及其后的元素均往后移动一位,腾出的空位置插入新元素e,顺序表长度+1,插入成功,返回True.

bool ListInsert(SqList &L, int i, int e)
{if(i < 1 || i > L.length+1) return false; 	//判断i的范围是否有效 if(L.length >= MaxSzie) return false;		//存储空间若满了不能插入 for(int j = L.length; j >= i; j--)L.data[j] = L.data[j-1];				//将第i个及其之后元素均后移一位 L.data[i-1] = e;							//插入元素e L.length++;									//表长度+1 return true;
} 

 时间复杂度分析:                                               

2.2.2 顺序表的删除(O(n))

        删除顺序表L中第i个位置的元素,用引用变量e返回被删除元素的值: ListDelete(&L,i,e);

         若i不合法(不在1 <= i <= L.length 范围内),返回False;

        若i合法,将第i个元素(要删除的元素)的值赋给e,并将第i+1个元素及其后的元素均往前移动一位,表长减1,返回True.

bool ListDelte(SqList &L, int i, int &e)  //注意e要加引用符 
{if(i < 1 || i > L.length) return false; 	//判断i的范围是否有效 e = L.data[i-1];							//将被删除元素的值赋给e for(int j = i; j < L.length; j++)L.data[j-1] = L.data[j];				//将第i个元素后面的元素均前移一位 L.length--;									//表长度-1 return true;
}

时间复杂度分析

2.2.2 顺序表的查找(O(n)或O(1))

        分按位查找和按值查找(顺序查找)两种.

        按位查找(O(1)):直接根据数组下标访问元素,获取表L中第i个位置的元素的值.GetElem(L,i);

ElemType GetElem(SqList L, int i)
{return L.data[i-1]; 
}

        按值查找(顺序查找)(O(n)):在顺序表L中查找第一个元素值 = e的元素,并返回其位序: LocateElem(&L,e);

时间复杂度分析

代码汇总

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 设计模式——享元模式

C 设计模式——享元模式 C 设计模式——享元模式1. 主要组成成分2. 享元模式内部状态3. 享元模式外部状态4. 逐步构建享元模式4.1 抽象享元类定义4.2 具体享元类实现4.3 享元工厂类实现4.4 主函数 5. 享元模式 UML 图享元模式 UML 图解析 6. 享元模式的优点7. 享元模式的缺点8.…

Linux驱动学习之中断与等待队列

本篇分为设备树部分和API接口部分 设备树 想要使用中断&#xff0c;设备树中需要有两个属性&#xff1a; interrupts // 表示要使用哪一个中断, 中断的触发类型等等。 interrupt-parent // 这个中断要接到哪一个设备去? 即父中断控制器是谁 父中…

趣味算法------拯救阿拉德大陆

目录 ​编辑 题目描述&#xff1a; 思路解析&#xff1a; 具体代码&#xff1a; 总结&#xff1a; 题目描述&#xff1a; 此时一批勇士也随之而来&#xff0c;但其能力也是参差不齐&#xff0c;我们需要挑选出最优秀的勇士来守护这片大陆。每位勇士都有属于自己的编号&am…

JobSchedulerService.setRequiresCharging需充电且电量大于90%才触发的现象

一、摘要 从源码看原生JobSchedulerService.setRequiresCharging 的特性&#xff0c;该特性竞品机器华为、Oppo也是如此。 1、应用处于前台可见&#xff0c;满足充电条件&#xff0c;立刻触发 2、应用处于后台不可见&#xff0c;需要设备连接USB或AC且电量大于90%&#xff0…

挂个人-CSDN Java优秀内容博主rundreamsFly抄袭

事件起因 今天点开自己的CSDN博客&#xff0c;发现给我推了一篇文章抄袭我自己昨天18点发的文章。 就是这篇&#xff0c;一字不差&#xff0c;博主昵称是&#xff1a;rundreamsFly&#xff0c;账号是rundreams。 抄袭者文章 发布于2024-8-26 19:37:41秒&#xff0c;比我发布…

C的温故而知新:位操作(C Primer Plus第十五章)

第十五章&#xff1a;位操作 这一章的篇幅不是很长&#xff0c;但既然能单独作为一章来讲的话&#xff0c;应该蛮重要的&#xff0c;但是我貌似没有总结出多少需要注意、加强记忆的东西&#xff0c;可见在JAVA的日常开发过程中基本不太遇见有关位操作的内容&#xff0c;所以我…

FSQ26信号分析仪RS FSU26 20HZ-26.5G频谱分析仪

罗德与施瓦茨Rohde & Schwarz FSQ26信号分析仪&#xff0c;20 Hz - 26.5 GHz ​R&S FSQ26 信号分析仪集两种仪器于一身。它提供高达 120 MHz 解调带宽的信号分析&#xff0c;并具有高端频谱分析仪的动态范围。 频率范围&#xff1a;20 Hz 至 26.5 GHz 高端频谱分析仪…

神经网络—卷积层

1.讲解 Conv2d out_channels 参数为2时&#xff0c;会生成两个卷积核&#xff0c;分别与输入进行卷积。得到的两个输出为输出 新生成的卷积核和原来的卷积核不一定相同 in_channels (int) – Number of channels in the input image out_channels (int) – Number of channels…

ARM32开发——(六)GPIO_USART通信原理

1. 串行通信和并行通信 1.1 串行通信 串行通信是一种数据传输的方式&#xff0c;它是指将数据按照一位一位的顺序依次发送和接收&#xff0c;常用于远距离通信、嵌入式系统和低带宽传输场景下。串行通信相对于并行通信而言&#xff0c;只需要传输一条数据线&#xff0c;相对简…

一文了解机器学习顶会ICML 2024的研究热点

对人工智能研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICML 2024的研究热点&#xff0c;帮助读者了解和跟踪机器学习和人工智能的前沿研究方向。本推文的作者是许东舟&#xff0c;审校为邱雪和黄星宇。 1 会议介绍 ICML&#x…

运放阻抗和噪声(同相放大器的输入/输出阻抗 + 电压跟随器阻抗 + 噪声 +信噪比)

2024-8-27&#xff0c;星期一&#xff0c;21:03&#xff0c;天气&#xff1a;阴雨&#xff0c;心情&#xff1a;晴。培训终于结束啦&#xff0c;开始轮岗了&#xff0c;看了两天PPT&#xff0c;加油加油&#xff0c;继续学习。 今天继续学习第六章运算放大器&#xff0c;主要学…

一文带你从零到实战,学会gcc和Makefile,多文件编译神器的使用与编写

目录&#xff1a; 目录&#xff1a; 一、什么是Makefile 1.1 makefile的作用&#xff1a; 1.2 makefile的基本组成&#xff1a; 二、Linux编译过程&#xff1a; 2.1 linux编译过程: 2.1.1 预处理&#xff08;Preprocessing&#xff09; 2.1.2 编译&#xff08;Compilation&am…

Android Studio 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 选择外观字体 前言 Android Studio 自定义字体大小&#xff0c;统一设置为 JetBrains Mono &#xff0c;大小为 14 具体操作 【File】>【Settings...】>【Appearance & Behavior】>【…

二、设置地图配置表

一、导入一个背景图 由于背景图比较大&#xff0c;需要缩小至0.73 二、写配置文件&#xff08;SO&#xff09; 使用List需要一个命名空间 写一个类&#xff0c;声明房间的出现数量和种类&#xff1b;将它实例化出来 三、枚举变量的多选 在枚举变量中标记命名空间&#xff…

docker 多线成服务,比如gunicorn服务启动报错解决办法

docker执行的时候报错&#xff0c;排查是线程创建权限不足导致的&#xff0c;报错如下。 解决办法 docker run -e OPENBLAS_NUM_THREADS1 your_image

Unity XR Interaction Toolkit 踩坑记录

1&#xff1a;按下 grap/select 键 物品直接飞到手上 2 按下 grap/select 键 物品一点点的想自己移动

OpenCV杂项图像变换(2)线性混合函数blendLinear()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 执行两个图像的线性混合&#xff1a; dst ( i , j ) weights1 ( i , j ) ∗ src1 ( i , j ) weights2 ( i , j ) ∗ src2 ( i , j ) \texttt{…

关于多线程你了解多少?

或许是执念太重&#xff0c;又或许是性格缺陷&#xff0c;我对java中一些知识的坚持&#xff0c;已经到了让人无法接受的地步。有些人甚至因此在背后骂我神经病、傻瓜。但我依旧我行我素&#xff0c;即使中间懈怠了很长时间&#xff0c;重新开始时我依旧会以这些知识为起点。不…

Ubuntu上搭建Nginx环境

1. 软件包下载 nginx下载地址 下载linux版本的nginx&#xff0c;如图圈示 2. 将下载好的软件包上传至Linux服务器 假设上传到 /opt/nginx 目录,进入目录 cd /opt/nginx解压&#xff0c;根据版本自行修改版本号 tar zxvf nginx-1.16.0.tar.gz3.安装 安装编译所需的依赖&a…

前端算法 === 力扣 111 二叉树的最小深度

目录 问题描述 DFS&#xff08;深度优先搜索&#xff09;方案 BFS&#xff08;广度优先搜索&#xff09;方案 总结 力扣&#xff08;LeetCode&#xff09;上的题目111是关于二叉树的最小深度问题。这个问题可以通过深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&…