数据结构 - 顺序表
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.线性表的表示方法 例如: 一.线性表的基本运算 二.线性表的复杂运算 1.线性表的合并运算 2.线性表的去重运算 三.顺序表 1.定义 顺序表,就…...
企业如何组建安全稳定的跨国通信网络?
组建一个安全稳定的跨国通信网络对于现代企业来说至关重要,尤其是当企业在全球范围内运营时。以下是一些关键步骤和考虑因素: 需求分析: 确定企业的具体通信需求,包括带宽要求、延迟敏感度、数据类型(如语音、视频、文…...
OCR在线识别网站现已上线!
注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 由作者亲自开发的ocr识别网站哈哈,暂时汇聚了三十多种验证码模型以及算法,欢迎各路朋友去尝试,网站地址如下 http://gbj5w3.natappfree.cc/ocr 验证码类型包括但…...
排名再升2位 中国平安位列BrandZ最具价值中国品牌第9位
9月10日,凯度华通明略发布“2024年BrandZ最具价值中国品牌”榜单,中国平安位列榜单第9位,较2023年榜单排名上升2位,品牌价值韧性增长至205.14亿美元,十度蝉联中国保险行业品牌价值第一位。榜单特别提到,中国…...
k8s集群部署:环境准备
本教程基于centos9 arm架构展开。 1. 设置主机名 为每个节点设置主机别名,以便于集群中的角色识别: # 设置主节点的主机名为 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. 顺序查找(Sequential Search) 基本原理: 顺序查找是一种最简单、最直观的查找算法。它从数据集合的第一个元素开始,依次与目标元素进行比较,直到找到目标元素或遍历完所有元素为止。 适用条件: 适用…...
h264 视频流中添加目标检测的位置、类型信息到SEI帧
在 H.264 视频编码中,SEI(Supplemental Enhancement Information)消息用于传输额外的、非编码的数据,例如目标检测的信息。SEI 数据可以嵌入到 H.264 流中,以在解码过程中传递这些附加信息。 一、步骤 确定 SEI 类型&…...
大模型api谁家更便宜
1 openai 可点此链接查询价格:https://openai.com/api/pricing/ 2 百度 可点此链接查询价格:https://console.bce.baidu.com/qianfan/chargemanage/list 需要注意,百度千帆平台上还提供其他家的模型调用服务, 如llama, yi-34b等…...
代码随想录算法训练营第二十三天| 455. 分发饼干、376. 摆动序列、53. 最大子序和
今日内容 贪心理论基础Leetcode. 455 分发饼干Leetcode. 376 摆动序列Leetcode. 53 最大子序和 贪心理论基础 贪心算法的本质就是选择每一阶段的最优,达到全局上的最优。 贪心算法和之前学到的所有方法相比,它没有固定的使用套路,也没有固…...
react js 路由 Router
完整的项目,我已经上传了 资料链接 起因, 目的: 路由, 这部分很难。 原因是, 多个组件,进行交互,复杂度比较高。 我看的视频教程 1. 初步使用 安装: npm install react-router-dom 修改 index.js/ 或是 main.js 把 App, 用 BrowserRouter 包裹起来 2. Navigate 点击…...
AplPost使用
请求get 方法 1,添加token 2,填写get 的参数 2,post方法 把对象的形式直接复制到row里面 3,delete方法 可以直接后面拼接参数...
【Qt】Qt与Html网页进行数据交互
前言:此项目使用达梦数据库,以Qt制作服务器,Html制作网页客户端界面,可以通过任意浏览器访问。 1、Qt与网页进行数据交互 1.1、第一步:准备qwebchannel.js文件 直接在qt的安装路径里复制即可 1.2、第二步…...
教师节特辑:AI绘制的卡通人物,致敬最可爱的人
【编号:9】教师节到了,今天我要分享一组由AI绘制的教师节主题卡通人物插画,每一幅都充满了对老师的敬意和爱戴。让我们一起用这些可爱的卡通形象,向辛勤的园丁们致敬! 🎓【教师形象】 这…...
SprinBoot+Vue智慧农业专家远程指导系统的设计与实现
目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…...
AI大模型行业专题报告:大模型发展迈入爆发期,开启AI新纪元
大规模语言模型(Large Language Models,LLM)泛指具有超大规模参数或者经过超大规模数据训练所得到的语言模型。与传统语言模型相比,大语言模型的构建过程涉及到更为复杂的训练方法,进而展现出了强大的自然语言理解能力…...
FLV 格式详解资料整理,关键帧格式解析写入库等等
FLV 是一种比较简单的视频封装格式。大致可以分为 FLV 文件头,Metadata元数据,然后一系列的音视频数据。 资料够多: FLV格式解析图 知乎用户 Linux服务器研究 画了一张格式解析图,比较全,但默认背景是白色ÿ…...
《深度学习》OpenCV 高阶 图像直方图、掩码图像 参数解析及案例实现
目录 一、图像直方图 1、什么是图像直方图 2、作用 1)分析图像的亮度分布 2)判断图像的对比度 3)检测图像的亮度和色彩偏移 4)图像增强和调整 5)阈值分割 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(Structured Query Language)是一种专门用来与数据库进行交互的编程语言,它允许用户查询、更新和管理关系型数据库中的数据。关系型数据库是基于表(Table)的数据库,其中表由行(…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...
高效的后台管理系统——可进行二次开发
随着互联网技术的迅猛发展,企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心,成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统,它不仅支持跨平台应用,还能提供丰富…...
基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...
PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础
在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…...
C/Python/Go示例 | Socket Programing与RPC
Socket Programming介绍 Computer networking这个领域围绕着两台电脑或者同一台电脑内的不同进程之间的数据传输和信息交流,会涉及到许多有意思的话题,诸如怎么确保对方能收到信息,怎么应对数据丢失、被污染或者顺序混乱,怎么提高…...
