【数据结构】顺序表的实现(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命令一 关于第一条命令执…

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

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

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

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

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; 找…

大珩PPT助手一键颜色设置

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

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

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

账号安全基本措施2

sudo命令 sudo(superuser do)&#xff0c;允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。 其配置在/etc/sudoers权。它允许系统管理员集中的管理用户的使用权限和使用的主机。属性必须为0440。 语法检查&#xff1a; 检查语法&#xff1a; 修改文件时&…

刷课必备!用Python实现网上自动做题

前言 开学少不了老师会布置一些 软件上面的作业&#xff0c;今天教大家用python制作自动答题脚本&#xff0c;100%准确率哦喜欢的同学记得关注、收藏哦 环境使用 Python3.8Pycharm 模块使用 import requests —> 数据请求模块 pip install requestsimport parsel —>…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明 文章编号&am…

基于STM32实现流水灯【Proteus仿真】

详情更多 wechat&#xff1a;嵌入式工程师成长日记 https://mp.weixin.qq.com/s?__bizMzg4Mzc3NDUxOQ&mid2247485624&idx1&sn4e553234c2624777409bd2067a07aad8&chksmcf430de0f83484f6189b119d9d83ea6e6f2a85d13afaa04d218483918231c38e6382d3007061&tok…

「React Native」为什么要选择 React Native 作为的跨端方案

文章目录 前言一、常见因素二、举个栗子2.1 项目背景2.2 为什么选择 React Native2.3 项目实施2.4 成果总结 前言 没有完美的跨端技术&#xff0c;只有适合的场景。脱离适用场景去谈跨端技术没有什么意义。 一、常见因素 共享代码库&#xff1a; React Native 允许开发者编写…

第⑮讲:Ceph集群管理与监控操作指南

文章目录 1.查看集群的状态信息2.动态的查看集群的状态信息3.查看集群的利用率4.查看OSD的资源利用率5.查看OSD的列表6.查看各组件的状态7.查看集群的仲裁信息8.查看/修改集群组件sock的配置参数 1.查看集群的状态信息 通过集群状态信息可以看到集群的健康状态、各个组件的运行…