【数据结构】顺序表的实现(C语言)

数据结构中的顺序表是一种线性表,它使用一段连续的物理空间来存储数据。顺序表中的元素在逻辑上相邻,在物理存储空间中也相邻。顺序表的存储结构具有随机存取的特性,可以支持快速的随机访问,但插入和删除操作需要移动大量元素,效率较低。顺序表通常适用于静态数据集合或对数据访问速度有较高要求的场景。
 

1.顺序表的结构体定义

#define N 100
typedef struct
{
int a [ N ]; // 存数据的数组 -- 数据域
int last ; // 时刻代表顺序表中有效元素的个数
} seqlist_t ;
顺序表的操作:
//1. 创建一个空的顺序表 createEmpty()
//2. 判断一个顺序表是否为空 空的话返回 1 不空返回 0 isEmpty()
//3. 判断一个顺序表是否为满 空的话返回 1 不空返回 0 isFull()
//4. 遍历顺序表中所有有效元素 showSeqlist()
//5. 在指定位置插入数据 insertInto()
//6. 删除指定位置上数据 deleteFrom()
//7. 求顺序表的长度 getLength()
//8. 查找某个元素出现在顺序表中的位置 findData()
//9. 清空顺序表 clearSeqlist()

2.创建一个空的顺序表

//1.创建一个空的顺序表
seqlist_t* createEmptySeqlist()
{seqlist_t* p = malloc(sizeof(seqlist_t));if(p == NULL){printf("malloc failed!!\n");return NULL;}p->last = 0;//因为是空的顺序表,有效元素个数初始化为0return p;//将malloc申请空间的首地址返回
}

3.判断顺序表是否为满

判断顺序表是否为满 表满返回值是1,未满是0
当顺序表中有效元素的个数与定义数组最大长度相等即为满表
//2. 判断顺序表是否为满 表满返回值是1,未满是0
int isFullSeqlist(seqlist_t* p)
{if(p->last == N)//有效元素个数 == 数组的长度,说明表满return 1;elsereturn 0;
}

4.指定位置插入数据操作

编程思想 :
1. 找到需要整体向后移动的有效元素的下标范围 post - 1 --- last - 1
2. 整体向后移动一个位置
3. 在插入位置,放上插入元素
4. 有效元素个数 + 1
int insertIntoSeqlist(seqlist_t* p, int post, int x)
{//0. 容错判断if(post <= 0 || post > p->last+1 || isFullSeqlist(p)){printf("insertIntoSeqlist failed!!\n");return -1;//通常用-1来表达失败}//1. 将从插入位置的元素下标到最后一个有效元素整体向后移动一个位置//post-1 ----- p->last-1int i;for(i = p->last-1; i >= post-1; i--)p->data[i+1] = p->data[i];//2.在插入位置,放上插入的数据xp->data[post-1] = x; //post-1得到插入位置的下标//3.有效元素个数+1p->last++;return 0;//代表插入成功
}

5.展示顺序表中有效元素

//4. 遍历顺序表将所有有效元素展示
void showSeqlist(seqlist_t* p)
{int i;for(i = 0; i < p->last; i++){printf("%d ", p->data[i]);}printf("\n");
}

6.判断顺序表是否为空

//顺序表中有效元素是0个即为空的顺序表
int isEmptySeqlist(seqlist_t* p)
{return p->last == 0;//判断有效元素个数是否 == 0
}

7.指定位置删除数据

编程思想 :
1. 找到需要整体向前移动的有效元素的下标范围 post --- last - 1
2. 整体向前移动一个位置
3. 有效元素个数 - 1
int deleteFromSeqilst(seqlist_t* p, int post)
{//0.容错判断if(post <= 0 || post > p->last || isEmptySeqlist(p)){printf("deleteFromSeqilst failed!!\n");return -1;}//1.将从删除位置的后一个位置的下标到最后一个有效元素,整体向前移动一个位置//post ---- p->last-1int i;for(i = post; i <= p->last-1; i++)p->a[i-1] = p->a[i];//2.有效元素个数-1p->last--;return 0;//删除成功
}

8.查找指定数据

//查找指定的数据x 在顺序表中的位置
遍历整个顺序表的所有有效元素 逐个比较 只要与查找的元素值相等返回下标即可(第一次出现)
不存在返回-1
int searchDataSeqlist(seqlist_t* p, int x)
{int i;//遍历有效元素查找for(i = 0; i < p->last; i++){if(p->data[i] == x)return i;//返回值代表的是,元素在数组中的下标}//如果程序能走到这,说明不存在return -1;
}

9.求顺序表的长度

//有效元素个数就是顺序表的长度
int getLengthSeqlist(seqlist_t* p)
{return p->last;
}

10.清空顺序表

//有效元素个数赋值为0即为空表
void clearSeqlist(seqlist_t* p)
{p->last = 0;
}

(顺序表清空不是清空数组元素,而是把有效元素个数last置为0)

结语

以上就是顺序表的实现方法,本次代码分享到此结束。后续还会分享数据结构有关知识。

最后的最后,还请大家点点赞,点点关注,谢谢!

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

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

相关文章

kanzi工程辅助解析

背景:实际开发过程中&#xff0c;使用kanzi studio工程&#xff0c;遇到一个很大的问题&#xff0c;就是在多工程&#xff0c;多预设件&#xff0c;复杂绑定算式情况下&#xff0c;很难梳理接口绑定情况&#xff0c;而且kanzi自带的查找很不好用。尤其是拿到一个新工程&#xf…

春季打卡圣地|超出片的成都文创产业园

春季拍照还在去人民公园、青龙湖吗&#xff1f;这个春天来点不一样的&#xff0c;就在金牛区的成都文创产业园——国际数字影像产业园旁&#xff0c;沙河源公园占地面积约150亩&#xff0c;地下室面积约4000平方米&#xff0c;这里的花能让摄影爱好者们拍个够。 国际数字影像产…

FFmpeg源码编译

msys2 依赖环境安装 依赖环境安装编译X264编译 fdk-aac文件处理编译x265编译FFmpeg 依赖环境安装 编译X264 用于h264 AVC视频格式编码 CCcl ./configure --enable-shared #指定使用cl,编译成动态链接库 make -j32 #使用32线程进行编码 make install命令一 关于第一条命令执…

Cocos Creator 节点的位置旋转与缩放详解

前言 Cocos Creator 是一款面向游戏开发者的跨平台游戏开发工具&#xff0c;它基于 JavaScript 和 TypeScript&#xff0c;并提供了丰富的游戏开发功能和工具。在游戏开发过程中&#xff0c;节点的位置、旋转和缩放是非常重要的操作&#xff0c;它们直接影响到游戏对象在游戏场…

springboot @Validated的概念以及实战

在 Spring Boot 开发中&#xff0c;Validated 注解是用于开启和利用 Spring 的验证框架的一种方式&#xff0c;特别是在处理控制层的输入验证时。本篇技术博客将详细介绍 Validated 注解的概念和使用方法&#xff0c;并通过实际的应用示例来展示如何在项目中实现有效的数据验证…

攻击者使用新型隐写术攻击,针对全球320个组织

隐写术是一种将数据隐藏在看似无害的文件中的技术&#xff0c;使用户和安全产品无法检测到它们。 近期&#xff0c;Positive Technologies 发现了TA558 黑客组织正在开展的一项新活动&#xff0c;使用隐写术将恶意代码隐藏在图像内&#xff0c;从而将各种恶意软件工具传递到目…

XiaodiSec day036 Learn Note 小迪安全学习笔记

XiaodiSec day036 Learn Note 小迪安全学习笔记 记录得比较凌乱&#xff0c;不尽详细 day36 XSS 老 XSS 所适用的环境是 IE 浏览器&#xff0c;早碰不到了 mxss 是比较老的漏洞&#xff0c;适用的环境是老版本的 QQ uxss 早已修复&#xff0c;攻击浏览器 swf 的 xss pdf…

展会媒体邀约资源,媒体宣传服务执行

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 在组织展会时&#xff0c;媒体宣传服务的执行是提升展会知名度和影响力的关键环节。 确定目标媒体&#xff1a;根据展会的主题和目标受众&#xff0c;选择适合的媒体进行邀请。这可能包…

ICommentService

目录 1、 ICommentService 1.1、 * 获取文章下的评论 1.2、 * 获取文章下的评论 1.3、 * 根据主键查询评论 1.4、 * 更新评论状态 2、 * options的接口

docker 虚拟化与docker的概念

一、云计算的三种服务模式 laas、pass、saas 1.1 IaaS: Infrastructure-as-a-Service&#xff08;基础设施即服务&#xff09; 第一层叫做IaaS&#xff0c;有时候也叫做Hardware-as-a-Service&#xff0c;几年前如果你想在办公室或者公司的网站上运行一些企业应用&#xff0c…

将彩色图转化为灰度图及其原理介绍

彩色图介绍 彩色图像是一种包含颜色信息的图像&#xff0c;通常由红色、绿色和蓝色&#xff08;RGB&#xff09;三个颜色通道组成。这三种颜色通道可以叠加在一起来形成各种不同的颜色。 彩色图像中的每个像素都有三个数值&#xff0c;分别表示红色、绿色和蓝色通道的强度或亮…

vue 关键字变红

1.html <div v-html"replaceKeywordColor(item.title)" ></div> 2.js //value为搜索框内绑定的值 replaceKeywordColor(val) {if (val?.includes(this.value) && this.value ! ) {return val.replace(this.value,<font color"red&…

RuoYi-Vue-Plus (SaToken 注解鉴权)

一、SaInterceptor 注解鉴权和路由拦截鉴权 拦截器&#xff1a;SaInterceptor 实现类位置&#xff1a; cn.dev33.satoken.interceptor.SaInterceptor 功能&#xff1a;Sa-Token 综合拦截器&#xff0c;提供注解鉴权和路由拦截鉴权能力 /*** 创建一个 Sa-Token 综合拦截器&…

重学java 19.面向对象 继承 上

走不出的那段阴霾&#xff0c;很多时候只不过是&#xff0c;我们把它当成了唯一 —— 24.4.22 面向对象整体知识导向&#xff1a; 知识梳理&#xff1a; 1.知道继承的好处 2.会使用继承 3.继承之后成员变量和成员方法的访问特点 4.方法的重写&#xff0c;知道方法重写的使用场景…

从构成看自来水厂自动化控制系统的创新与发展

自来水厂自动化控制系统涵盖了多个关键组成部分&#xff0c;包括水管理云平台、供水监控系统以及供水调度平台。 系统内嵌了一系列自主创新的核心算法&#xff0c;这些算法结合了数学建模、机器仿真和流体力学等多元数据模型&#xff0c;以优化设备间的关联和控制关系&#xf…

python爬虫 - 爬取html中的script数据(爬取新闻 36kr.com)

文章目录 1. 分析页面内容数据格式2. 使用re.findall方法&#xff0c;爬取新闻3. 使用re.search 方法&#xff0c;爬取新闻 1. 分析页面内容数据格式 打开 https://36kr.com/ 按F12&#xff08;或 在网页上右键 --> 检查&#xff08;Inspect&#xff09;&#xff09; 找…

CANFD帧能否唤醒CAN网络

前言 本文的撰写起因是源于AUTOSAR技术群中一位朋友的提问。他提出的问题是关于AUTOSAR网络管理功能是否支持CAN FD报文的实现。 朋友:Autosar网络管理功能有用CANFD报文实现的吗? 我:有啊,Autosar网络管理不限制报文类型是标准CAN还是CANFD 朋友:数据收发还是8字节的方式…

大珩PPT助手一键颜色设置

大珩PPT助手最新推出的一键设置文字颜色和背景色功能&#xff0c;为用户在创建演示文稿时带来了更便捷、高效的体验。这一功能使用户能够轻松调整演示文稿中文字的颜色和幻灯片的背景色&#xff0c;以满足不同场合和主题的需要。 以下是该功能的几个关键特点和优势&#xff1a…

Python多继承机制与MRO深度解析

Python多继承机制与MRO深度解析 在Python的面向对象编程中&#xff0c;多继承是一个强大的特性&#xff0c;它允许一个类继承自多个父类&#xff0c;从而集成多个父类的属性和方法。然而&#xff0c;多继承也带来了一个复杂的问题&#xff1a;当子类调用一个方法时&#xff0c…

2024深圳杯东三省数学建模竞赛A题个火箭残骸的准确定位代码成品论文

问题重述 绝大多数火箭为多级火箭&#xff0c;下面级火箭或助推器完成既定任务后&#xff0c;通过级间分离装置分离后坠落。在坠落至地面过程中&#xff0c;残骸会产生跨音速音爆。为了快速回收火箭残骸&#xff0c;在残骸理论落区内布置多台震动波监测设备&#xff0c;以接收不…