当前位置: 首页 > news >正文

数据结构 - 顺序表

0.线性表

        1.定义

                线性表就是零个或多个相同数据元素的有限序列。

        2.线性表的存储结构

        ①.顺序结构

        ②.链式结构

        3.线性表的表示方法

例如:

一.线性表的基本运算

二.线性表的复杂运算

1.线性表的合并运算

2.线性表的去重运算

三.顺序表

1.定义

        顺序表,就是线性表的顺序存储格式

2.顺序表的实现

①.顺序表的创建

/*** @description:            创建一个新的顺序表* @param       :           无* @return      :           创建的顺序表的指针
*/
seqlist_t *create_seqlist(void)
{seqlist_t *L = NULL;/* 1.申请空间 */L = (seqlist_t *)malloc(sizeof(seqlist_t));if(NULL == L){printf("malloc seqlist_t *L faild error!\n");return NULL;}/* 初始化顺序表内部指针的位置 */L->last = -1;return L;}

②.置空顺序表

/*** @description:        清空顺序表内的数据* @param - L   :       要操作的顺序表* @return      :       无
*/
void set_empty_seqlist(seqlist_t *L)
{if(NULL == L){printf("seqlist_t *L is NULL\n");return ;}L->last = -1;
}   

③.释放顺序表

/*** @description:       释放一个顺序表* @param L    :       要释放的顺序表的指针* @return     :       无
*/
void clear_seqlist(seqlist_t * L)
{/* 1.首先判断传入的顺序表是否有效 */if(NULL == L){printf("seqlist_t *L is NULL\n");return ;}/* 若有效,则释放该表 */free(L);
}

④.判断顺序表是否满/是否空

/*** @description:                  判断顺序表是否为满* @param L         :             要进行判断的顺序表* @return          :             1 为满 ,其他 为非满
*/
int is_full_seqlist(seqlist_t *L)
{if(NULL == L){printf("seqlist_t *L is NULL\n");return -1;}return (L->last == MAXSIZE - 1);}
/*** @description:            判断顺序表是否为空* @param - L       :       要操作的顺序表* @return          :       1 为空,其他 为非空
*/
int is_empty_seqlist(seqlist_t *L)
{if(NULL == L){printf("seqlist_t *L is NULL\n");return -1;}return (L->last == -1);
}

⑤.向顺序表插入一个元素

/*** @description:            向顺序表中指定位置前插入一个数据* @param L         :       要进行操作的顺序表* @param x         :       要插入的值* @param pos       :       要插入的位置* @return          :       0 成功, 其他 失败
*/
int insert_seqlist(seqlist_t *L,data_t x,int pos)
{int i = 0;/* 若顺序表已满,或者插入位置无效 */if(is_full_seqlist(L) || (pos < 0) || (pos > L->last +1)){printf("input argv is invalid\n");return -1;}/* 若pos要插入的位置为i,则从最后一个元素开始,到i的元素先依次往后移动一个位置 */for(i = L->last;i >= pos;i--){L->data[i + 1] = L->data[i];}/* 将x的值赋给data[pos]位置 */L->data[pos] = x;/* 顺序表末尾的指针往后移动一个位置 */L->last++;return 0;
}

⑥.删除指定位置的元素

/*** @description:            在顺序表中指定位置删除一个数据* @param - pos     :       指定删除的元素的位置* @return          :       0 成功,其他 失败
*/
int delete_seqlist(seqlist_t *L,int pos)
{int i = 0;if(pos < 0 || pos > L->last){printf("input pos invalid\n");return -1;}if(NULL == L){printf("seqlist_t *L is NULL\n");return -1;}for(i = pos;i < L->last;i++)L->data[i] = L->data[i + 1];L->last--;return 0;}

⑦.替换顺序表中指定位置的元素

/*** @description:        替换顺序表中指定位置的数据* @param - L   :       要操作的顺序表* @param - x   :       输入的元素值* @param - pos :       要替换的元素的位置* @return      :       0 成功, 其他 失败 
*/
int change_seqlist(seqlist_t *L,data_t x,int pos)
{if(NULL == L){printf("seqlist_t *L is NULL\n");return -1;}if(pos < 0 || pos > L->last){printf("input pos invalid\n");return -1;}L->data[pos] = x;return 0;
}

⑧.找到元素X在表中第一次出现的位置

/*** @description:            查找指定元素在顺序表中第一次出现的位置* @param - L       :       要操作的顺序表* @param - x       :       要查找的元素* @return          :       x第一次出现的位置
*/
int search_seqlist(seqlist_t *L,data_t x)
{int i = 0;if(NULL == L){printf("seqlist_t *L is NULL\n");return -1;}for(i = 0;i <= L->last;i++){if(L->data[i] == x)return i;   }return -1;
}   

⑨.打印顺序表的全部内容

/*** @description:        打印顺序表的所有数据* @param L     :       要进行操作的顺序表* @return      :       无
*/
void show_seqlist(seqlist_t *L)
{int i = 0;if(NULL == L){printf("seqlist *L is NULL\n");return ;}for(i = 0;i <= L->last;i++)printf("L->data[%d] = %d\n",i,L->data[i]);return ;
} 

⑩.求顺序表长

/*** @description:            获取顺序表的长度* @param - L       :       要操作的顺序表* @return          :       顺序表的长度
*/
int get_length_seqlist(seqlist_t *L)
{if(NULL == L){printf("seqlist_t *L is NULL\n");return -1;}return (L->last + 1);
}

相关文章:

数据结构 - 顺序表

0.线性表 1.定义 线性表就是零个或多个相同数据元素的有限序列。 2.线性表的存储结构 ①.顺序结构 ②.链式结构 3.线性表的表示方法 例如&#xff1a; 一.线性表的基本运算 二.线性表的复杂运算 1.线性表的合并运算 2.线性表的去重运算 三.顺序表 1.定义 顺序表&#xff0c;就…...

企业如何组建安全稳定的跨国通信网络?

组建一个安全稳定的跨国通信网络对于现代企业来说至关重要&#xff0c;尤其是当企业在全球范围内运营时。以下是一些关键步骤和考虑因素&#xff1a; 需求分析&#xff1a; 确定企业的具体通信需求&#xff0c;包括带宽要求、延迟敏感度、数据类型&#xff08;如语音、视频、文…...

OCR在线识别网站现已上线!

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 由作者亲自开发的ocr识别网站哈哈,暂时汇聚了三十多种验证码模型以及算法,欢迎各路朋友去尝试,网站地址如下 http://gbj5w3.natappfree.cc/ocr 验证码类型包括但…...

排名再升2位 中国平安位列BrandZ最具价值中国品牌第9位

9月10日&#xff0c;凯度华通明略发布“2024年BrandZ最具价值中国品牌”榜单&#xff0c;中国平安位列榜单第9位&#xff0c;较2023年榜单排名上升2位&#xff0c;品牌价值韧性增长至205.14亿美元&#xff0c;十度蝉联中国保险行业品牌价值第一位。榜单特别提到&#xff0c;中国…...

k8s集群部署:环境准备

本教程基于centos9 arm架构展开。 1. 设置主机名 为每个节点设置主机别名&#xff0c;以便于集群中的角色识别&#xff1a; # 设置主节点的主机名为 kmaster sudo hostnamectl set-hostname kmaster --static# 设置工作节点1的主机名为 kworker1 sudo hostnamectl set-hostn…...

<C++> set、map模拟实现

目录 一、适配器红黑树 二、红黑树再设计 1. 重新设计 RBTree 的模板参数 2. 仿函数模板参数 3. 正向迭代器 构造 operator*() operator->() operator!() operator() operator--() 正向迭代器代码 4. 反向迭代器 构造 operator* operator-> operator operator-- operat…...

软考学习 数据结构 查找

1. 顺序查找&#xff08;Sequential Search&#xff09; 基本原理&#xff1a; 顺序查找是一种最简单、最直观的查找算法。它从数据集合的第一个元素开始&#xff0c;依次与目标元素进行比较&#xff0c;直到找到目标元素或遍历完所有元素为止。 适用条件&#xff1a; 适用…...

h264 视频流中添加目标检测的位置、类型信息到SEI帧

在 H.264 视频编码中&#xff0c;SEI&#xff08;Supplemental Enhancement Information&#xff09;消息用于传输额外的、非编码的数据&#xff0c;例如目标检测的信息。SEI 数据可以嵌入到 H.264 流中&#xff0c;以在解码过程中传递这些附加信息。 一、步骤 确定 SEI 类型&…...

大模型api谁家更便宜

1 openai 可点此链接查询价格&#xff1a;https://openai.com/api/pricing/ 2 百度 可点此链接查询价格&#xff1a;https://console.bce.baidu.com/qianfan/chargemanage/list 需要注意&#xff0c;百度千帆平台上还提供其他家的模型调用服务&#xff0c; 如llama, yi-34b等…...

代码随想录算法训练营第二十三天| 455. 分发饼干、376. 摆动序列、53. 最大子序和

今日内容 贪心理论基础Leetcode. 455 分发饼干Leetcode. 376 摆动序列Leetcode. 53 最大子序和 贪心理论基础 贪心算法的本质就是选择每一阶段的最优&#xff0c;达到全局上的最优。 贪心算法和之前学到的所有方法相比&#xff0c;它没有固定的使用套路&#xff0c;也没有固…...

react js 路由 Router

完整的项目,我已经上传了 资料链接 起因, 目的: 路由, 这部分很难。 原因是, 多个组件,进行交互,复杂度比较高。 我看的视频教程 1. 初步使用 安装: npm install react-router-dom 修改 index.js/ 或是 main.js 把 App, 用 BrowserRouter 包裹起来 2. Navigate 点击…...

AplPost使用

请求get 方法 1&#xff0c;添加token 2&#xff0c;填写get 的参数 2,post方法 把对象的形式直接复制到row里面 3&#xff0c;delete方法 可以直接后面拼接参数...

【Qt】Qt与Html网页进行数据交互

前言&#xff1a;此项目使用达梦数据库&#xff0c;以Qt制作服务器&#xff0c;Html制作网页客户端界面&#xff0c;可以通过任意浏览器访问。 1、Qt与网页进行数据交互 1.1、第一步&#xff1a;准备qwebchannel.js文件 直接在qt的安装路径里复制即可 1.2、第二步&#xf…...

教师节特辑:AI绘制的卡通人物,致敬最可爱的人‍

【编号&#xff1a;9】教师节到了&#xff0c;今天我要分享一组由AI绘制的教师节主题卡通人物插画&#xff0c;每一幅都充满了对老师的敬意和爱戴。让我们一起用这些可爱的卡通形象&#xff0c;向辛勤的园丁们致敬&#xff01; &#x1f393;【教师形象】 这…...

SprinBoot+Vue智慧农业专家远程指导系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…...

AI大模型行业专题报告:大模型发展迈入爆发期,开启AI新纪元

大规模语言模型&#xff08;Large Language Models&#xff0c;LLM&#xff09;泛指具有超大规模参数或者经过超大规模数据训练所得到的语言模型。与传统语言模型相比&#xff0c;大语言模型的构建过程涉及到更为复杂的训练方法&#xff0c;进而展现出了强大的自然语言理解能力…...

FLV 格式详解资料整理,关键帧格式解析写入库等等

FLV 是一种比较简单的视频封装格式。大致可以分为 FLV 文件头&#xff0c;Metadata元数据&#xff0c;然后一系列的音视频数据。 资料够多&#xff1a; FLV格式解析图 知乎用户 Linux服务器研究 画了一张格式解析图&#xff0c;比较全&#xff0c;但默认背景是白色&#xff…...

《深度学习》OpenCV 高阶 图像直方图、掩码图像 参数解析及案例实现

目录 一、图像直方图 1、什么是图像直方图 2、作用 1&#xff09;分析图像的亮度分布 2&#xff09;判断图像的对比度 3&#xff09;检测图像的亮度和色彩偏移 4&#xff09;图像增强和调整 5&#xff09;阈值分割 3、举例 二、直方图用法 1、函数用法 2、参数解析…...

coredump-N: stack 消耗完之后,用户自定义信号处理有些问题 sigaltstack

https://mzhan017.blog.csdn.net/article/details/129401531 在上面一篇是关于stack耗尽的一个小程序例子。 https://www.man7.org/linux/man-pages/man2/sigaltstack.2.html 这里提到一个问题,就是如果栈被用光了,这个时候SIGSEGV的用户自定义的handler处理可能就没有空间进…...

数据库有关c语言

数据库的概念 SQL&#xff08;Structured Query Language&#xff09;是一种专门用来与数据库进行交互的编程语言&#xff0c;它允许用户查询、更新和管理关系型数据库中的数据。关系型数据库是基于表&#xff08;Table&#xff09;的数据库&#xff0c;其中表由行&#xff08…...

ib_insync与pandas集成:金融数据分析的完整解决方案

ib_insync与pandas集成&#xff1a;金融数据分析的完整解决方案 【免费下载链接】ib_insync Python sync/async framework for Interactive Brokers API 项目地址: https://gitcode.com/gh_mirrors/ib/ib_insync 想要在Python中高效处理Interactive Brokers的金融数据吗…...

从零搭建私有物联网网络:LoRaWAN服务器实战指南

从零搭建私有物联网网络&#xff1a;LoRaWAN服务器实战指南 【免费下载链接】lorawan-server Compact server for private LoRaWAN networks 项目地址: https://gitcode.com/gh_mirrors/lo/lorawan-server 在物联网部署浪潮中&#xff0c;私有服务器搭建已成为企业和开发…...

【技术演进】从GPT-1到GPT-4:大语言模型的核心突破与演进图谱

1. 从GPT-1到GPT-4&#xff1a;技术演进的起点与飞跃 2018年诞生的GPT-1就像刚学会走路的孩子——它能理解简单的文本指令&#xff0c;但经常答非所问。当时这个仅有1.17亿参数的模型&#xff0c;采用了最基础的Transformer解码器架构&#xff0c;通过"预测下一个词"…...

告别地图切换卡顿:优化OpenLayers加载天地图瓦片的性能与体验指南

告别地图切换卡顿&#xff1a;优化OpenLayers加载天地图瓦片的性能与体验指南 在WebGIS项目开发中&#xff0c;地图加载速度和操作流畅度直接影响用户体验。当项目上线后&#xff0c;用户反馈地图切换卡顿、加载缓慢时&#xff0c;开发者往往需要深入底层优化才能解决问题。本文…...

信号分析避坑指南:MATLAB里算相位差,为什么你的结果总是不准?

MATLAB相位差计算避坑指南&#xff1a;从频谱泄漏到四象限陷阱的深度解析 在信号处理领域&#xff0c;相位差计算看似简单却暗藏玄机。许多工程师在使用MATLAB进行相位差分析时&#xff0c;经常会遇到结果跳变、误差过大甚至完全不符合预期的情况。这并非MATLAB的"bug&quo…...

Driver Store Explorer:Windows驱动管理的终极解决方案

Driver Store Explorer&#xff1a;Windows驱动管理的终极解决方案 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer Driver Store Explorer&#xff08;简称RAPR&#xff09;是一…...

从零构建大模型?斯坦福CS336爆火课程带你闯关,附超全学习资源包!

文章介绍了斯坦福大学CS336《从零开始构建语言模型》课程&#xff0c;该课程借鉴操作系统课程理念&#xff0c;带领学生体验语言模型创建的各个环节&#xff0c;包括数据收集、模型构建、训练和评估。课程内容实践性强&#xff0c;需要较多学习开发时间&#xff0c;适合有一定基…...

如何让AI成为你的第二大脑?AnythingLLM浏览器扩展使用指南

如何让AI成为你的第二大脑&#xff1f;AnythingLLM浏览器扩展使用指南 【免费下载链接】anything-llm 这是一个全栈应用程序&#xff0c;可以将任何文档、资源&#xff08;如网址链接、音频、视频&#xff09;或内容片段转换为上下文&#xff0c;以便任何大语言模型&#xff08…...

重新定义开源RTS体验:Beyond All Reason深度技术解析

重新定义开源RTS体验&#xff1a;Beyond All Reason深度技术解析 【免费下载链接】Beyond-All-Reason www.beyondallreason.info 项目地址: https://gitcode.com/gh_mirrors/be/Beyond-All-Reason Beyond All Reason是一款基于Spring引擎开发的开源实时战略游戏&#xf…...

Lean 4:用数学证明构建高可靠软件的革命性工具

Lean 4&#xff1a;用数学证明构建高可靠软件的革命性工具 【免费下载链接】lean4 Lean 4 programming language and theorem prover 项目地址: https://gitcode.com/GitHub_Trending/le/lean4 问题&#xff1a;当系统崩溃成为不可承受之重 2024年3月&#xff0c;某医疗…...