顺序表的实现和操作

目录

一.前言

二. 顺序表的优缺点

三. 顺序表的定义和初始化

四.顺序表的相关操作


一.前言

        首先介绍下线性表的定义,线性表是具有相同特性的数据元素的一个有限序列。而我们的顺序表就是线性表的一种,是线性表的顺序存储结构。所谓顺序存储就是把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。

二. 顺序表的优缺点

        顺序表的优点就是能够以物理位置相邻表示逻辑关系,任一元素均可随机存取。原因就在于它占用一片连续的存储空间。并且知道了其中第一个元素的存储位置之后,就能得到其它数据元素的存储位置。如下所示:

        

 

但它也同样存在一些缺点问题:首先第一个就是存储空间分配的不灵活,第二个就是运算的空间复杂度高。也就是说,如果我要找的数据元素在最后一位,它就要从开头一直查找到最后一位。为了解决上面这些问题,我们可以使用链式存储,现在我们主要学习顺序存储。

三. 顺序表的定义和初始化

        我们可以知道,顺序表中的每个位置都存储了对应的数据结构,因此我们在定义顺序表的时候,就要包含两个因素,一个是顺序表实际占用的长度。另外一个就是对应长度上存储的数据。如下所示即为我们顺序表的定义:

#define LIST_INIT_SIZE 100   //定义整个线性表存储空间的初始分配量typedef struct{              //定义一个结构体类型ElemType elem[LIST_INIT_SIZE];       //用来存储数据int length;                //顺序表实际当前的长度
}SqList;               //起一个别名,命名为SqList

  在得到了顺序表的定义之后,我们还得用它来修饰一个变量名,再对这个进行初始化或者赋值。就像C语言中的数据类型一样,知道了数据类型,还得用它来修饰变量并给变量进行赋值等相关操作。我们定义一个顺序表就是SqList L。表示L就是SqList类型的顺序表。

下面我们来了解下顺序表的初始化:

#define MAXSIZE 100
#define OVERFLOW -2
#define OK 1
typedef int Status;
typedef char ElemType;int InitList_Sq(SqList &L){L.elem=new ElemType[MAXSIZE];    //为顺序表分配空间if(!L.elem) exit(OVERFLOW);      //分配空间失败,则退出并返回OVERFLOW对应的数值,也就是-2L.length=0;        //空顺序表里面没有元素,实际长度也就为0;return OK;        
}

值得注意的是:这里面形参的格式为SqList &L表示的是我们数据结构使用类C语言的一种参数引用形式,表示直接修改顺序表L中的数据,而不是单单的一个数据。以后一出现&都表示引用。

其中的MAXSIZE和OVERFLOW以及OK都是代表着某个数字,在函数的开头有声明。其中的Status和ElemType也都表示一种数据类型。为了后面操作的方便,我在这里全部列举出来,如下所示:

//定义函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2//再定义两个函数类型
typedef int Status;
typedef char ElemType;

四.顺序表的相关操作

1.顺序表的取值

如下所示,顺序表的取值就是根据位置i来获取相应位置数据元素的内容。

Status GetElem(SqList L,int i,ElemType &e){if(i<1||i>L.length) return ERROR;//判断查找的位置i是否合理,若不合理则返回ERRORe=L.elem[i-1];    //第i-1个单元存储着第i个数据,并通过e返回取值结果return OK;
}

2. 顺序表的查找

如下所示,顺序表的查找就是在线性表中查找值为e的数据元素,并返回其序号(是第几个元素)。

Status LocateElem(SqList L,ElemType e){for(int i=0;i<L.length;i++){if(L.elem[i]==e) return i+1;   //查找成功则返回它的序号,是第几个元素}return 0;        //上面查找失败,则返回0
}

3.  顺序表的插入

如下所示,顺序表的插入运算就是在表的第i个位置上,插入一个新结点e,使长度为n的顺序表变成长度为n+1的顺序表。值得注意的是,需要先判断插入位置是否合法。

Status ListInsert_Sq(SqList &L,int i,ElemType e){if(i<1||i>L.length+1) return ERROR; //插入的位置i不合法的情况,就返回ERRORif(L.length==MAXSIZE) return ERROR; //当前顺序表的存储空间已经满了,也是不能存储的for(int j=L.length-1;j>=i=1;j--){L.elem[j+1]=L.elem[j];         //将要插入的位置及之后的元素都进行后移操作}
L.elem[i-1]=e;                    //将新的元素e放入第i个位置
L.length++;                  //顺序表的表长加一
return OK;
}

4. 顺序表的删除

如下所示,顺序表的删除就是删除顺序表中第i个元素,并且将被删除元素的后面元素都前移,保证顺序表存储空间的连续性。

Status ListDelete_Sq(SqList &L,int i){if(i<1||i>L.length) return ERROR; //要删除的位置i不合法for(int j=i;j<=L.length-1;j++){L.elem[j-1]=L.elem[j];        //被删除元素之后的元素前移}L.length--;        //表长长度减一return OK;
}

 

        

         

      

 

 

 

        

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

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

相关文章

Photos框架 - 自定义媒体选择器(UI列表)

引言Photos框架 - 自定义媒体资源选择器&#xff08;数据部分&#xff09;-CSDN博客 关于自定义媒体选择器上一篇博客我们已经介绍了使用Photos获取媒体资源数据和处理媒体资源数据&#xff0c;有了数据&#xff0c;UI的实现就比较灵活了&#xff0c;我就以上面的设计样式为例…

LabVIEW操作系列1

系列文章目录 我的记录&#xff1a; LabVIEW操作系列 文章目录 系列文章目录前言五、特殊用法5.1 取值范围表示5.2 对输入值取值范围进行限定5.3 控制多个While循环停止运行。5.4 获取按钮上的文本5.5 获取按钮上的文本【进阶】 六、使用步骤1.引入库2.读入数据 七、其余功能7.…

数学建模基础:数据的分析与模型构建

引言 在当今数据驱动的世界中&#xff0c;数学建模已成为解决复杂问题的关键工具。本篇文章将探讨数学建模的基础知识&#xff0c;特别是数据处理与拟合模型的重要性和方法。 第一部分&#xff1a;数据的重要性 数据是数学建模的基石。在开始任何建模工作之前&#xff0c;我…

Spring源码(六)--Bean生命周期相关的接口

Bean生命周期相关的接口 Bean生命周期接口相关的这些类和接口&#xff0c;都可以多看看。 Bean工厂实现应该尽可能支持标准的Bean生命周期接口。 整套初始化方法及其标准顺序为: * * <li>BeanNameAwares {code setBeanName}* <li>BeanClassLoaderAwares {code se…

2.5 openCv -- 使用 OpenCV 合并(混合)两张图片

目标 在本教程中,您将学习: 什么是线性混合及其用途;如何使用 addWeighted() 函数合并两张图片。理论 注释 下面的解释来自 Richard Szeliski 的书籍《计算机视觉:算法与应用》。 从我们之前的教程中,我们已经了解了一些像素运算符。一个有趣的二元(双输入)运算符是线…

【Python selenium过极验五子棋】自动化过五子棋人机验证,享受丝滑的落子,秒了

文章日期&#xff1a;2024.07.25 使用工具&#xff1a;Python 文章类型&#xff1a;自动化过极验五子棋 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法…

Spring Boot(八十二):SpringBoot通过rsa实现API加密

项目中使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密 。 下面开始代码演示 1 接口加密 1.1 新建一个springboot项目 1.2 添加依赖 <dependency>&l…

如何做校园圈子小程序,需要哪些功能?可打包APP小程序H5,源码交付,支持二开!

独立学校首页 支持每个学校独立首页!每个学校都可以拥有专属首页&#xff0c;打造不同风格的学校首页展示效果 多业务覆盖 可实现校园内外卖、跑腿、超市、药店水果、快餐店等业务全覆盖!所有配送业务平台都可开展 多站点运营 支持多学校多站点运营&#xff0c;各分站管理员可独…

【Docker】CentOS7环境下的安装

环境展示 安装 配置仓库 sudo yum install -y yum-utils # docker官方key文件下载 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 建议使用阿里云key文件下载 sudo yum-config-manager --add-repo https://mirrors.aliyun.…

Python小工具——监听某网站的数据变化并进行邮件通知

目录 一、需求描述 二、解析 三、实例代码 一、需求描述 监听自考网2024年广东省6月份的毕业生学历注册进度&#xff0c;这是网址&#xff1a;https://www.chsi.com.cn/xlcx/count_zk.jsp&#xff0c; 如上图所示&#xff0c;我们想知道这个红色的空格啥时候被填满&#xf…

【yolov8】|小目标优化|:增加CA机制 运行成功

🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀 你好,我是@努力的小巴掌 之前用baseline跑了yolov8。 为了提升性能,我们需要对yolov8进行优化。 本次的优化,我们从增加注意力机制开始…

无人机组装与操作实训课程详解

一、课程名称与目标 课程名称&#xff1a;无人机组装与操作实训课程 课程目标&#xff1a;本课程旨在培养学员对无人机组装技术的深入理解和实际操作能力&#xff0c;使学员能够独立完成无人机的组装、调试和日常维护工作&#xff0c;并具备一定的无人机操作能力和安全意识。…

Web开发:使用数据库工具Navicat技巧合集

1.EXCEL批量导入数据 打开Navicat准备导入数据&#xff0c;点击导入 选择excel 字段名行应该写0&#xff08;下图错误&#xff09; 下一步&#xff0c;表已经用语法建好了&#xff0c;因此不用打勾 配置好字段&#xff0c;下一步&#xff0c;点击开始即可。 2.数据表从一个服…

【HarmonyOS】HarmonyOS NEXT学习日记:七、页面与组件的生命周期

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;七、页面与组件的生命周期 页面和组件 组件&#xff1a;用Component装饰的代码称为自定义组件页面&#xff1a;Entry装饰的组件即页面的根节点 组件生命周期 aboutToAppear&#xff1a;在创建自定义组件的新实例后&#xf…

WPF---Prism视图传参

Prism视图传参方式。 实际应用场景 点击tabitem中的列表数据&#xff0c;同步更新到ListStatic Region对应的界面。目前用两种方式实现了传参数据同步。 第一&#xff0c;事件聚合器&#xff08;EventAggregator&#xff09; 1. 定义事件 创建一个事件类&#xff0c;用于传…

手持式气象检测设备:便携科技,气象探测

一、手持式气象检测设备&#xff1a;小巧身躯&#xff0c;大能量 手持式气象检测设备&#xff0c;顾名思义&#xff0c;是一种可以手持操作的气象监测工具。它集成了温度、湿度、气压、风速风向等多种传感器&#xff0c;能够实时获取气象数据&#xff0c;并通过显示屏或手机APP…

springboot 使用jSerialComm 读取串口数据

依赖&#xff1a; <dependency> <groupId>com.fazecast</groupId> <artifactId>jSerialComm</artifactId> <version>${jSerialComm}</version> </dependency> 代码&#xff1a; private ByteArrayOutputStream byteArrayOutp…

Leetcode—240. 搜索二维矩阵 II【中等】

2024每日刷题&#xff08;149&#xff09; Leetcode—240. 搜索二维矩阵 II 实现代码 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int r 0;int c matrix[0].size() - 1;while(r < matrix.size() &&…

C++20之设计模式:观察者模式

观察者模式 观察者属性观察者Observer\<T>Observable<T> 连接观察者和被观察者依赖问题取消订阅和线程安全 可重入通过 Boost.Signals2 来实现 Observer总结 观察者 观察者模式是一种流行且必需的模式&#xff0c;QT的信号槽机制本质上就是观察者模式。 属性观察…

android get请求多个参数拼接工具

Android 多个参数拼接到请求地址中的小工具&#xff1a; public static String buildUrlWithParameters(String baseUrl, List<AssetGenesisBean> assetBeans) {StringBuilder urlBuilder new StringBuilder(baseUrl);if (assetBeans ! null && !assetBeans.isE…