顺序表知识点——顺序表的增删查改

目录

准备文件

创建顺序表蓝图

顺序表初始化函数接口

 顺序表的销毁函数接口

顺序表的打印函数接口 

顺序表的插入函数接口 

顺序表的删除函数接口 


从本节开始, 复习数据结构。 空间复杂度还有时间复杂度之后利用例题学习。 这节先学习顺序表的增删查改。 

首先, 顺序表有点类似于数组, 都是一块连续的内存空间。 如图:

这就是顺序表。 

顺序表又分固态的顺序表和动态的顺序表。 但是固态的顺序表实用性不大,在实际生活中我们很难把握数据的数量。 固态的顺序表可能导致开辟的空间过大或者过小, 所以动态的顺序表就是我们的首选。 

现在我们主要以动态的顺序表为例, 学习一下顺序表的增删查改。 

准备文件

先准备好三个文件

两个.c文件

一个.h文件

创建顺序表蓝图

在.h文件中创建顺序表结构体, 函数声明等。

首先包含一下头文件和要保存的数据进行typedef一下, 将要保存的数据类型typedef的意义是方便后续代码的维护, 后续使用该类型时一律使用SQDataType。

然后创建结构体

 动态的顺序表要用到动态内存分配, 用一个指针也就是data指向动态开辟的空间。因为要保存的数据类型是SQDataType 所以指针的类型是SQDataType, size是目前保存的数据的个数, capacity是顺序表的总容量。

创建完是这样的。

顺序表初始化函数接口

在.h文件中声明函数接口

.c中实现初始化函数: 

这里我初始化设置了10个数据的空间, 也可以不开辟空间,直接让ps->data = NULL, 也就是指向空。

这里我已初始化设置10个空间为例。 

 顺序表的销毁函数接口

既然有初始化开辟10个空间, 就得有销毁顺序表函数接口。 不然会出现内存泄漏。

.h声明:

 

.c接口实现:

 

释放ps->data指向的空间, 然后置为空, 顺序表的数据大小size也置位0, capacity顺序表容量同样变成0.

顺序表的打印函数接口 

在实现顺序表的插入操作前, 先实现打印, 方便后续我们检查顺序表写的是否正确。 

.h接口声明

.c接口实现:

 

顺序表的插入函数接口 

顺序表的插入函数接口分为:头插, 尾插, 任意位置插入。

头插就是在顺序表的第一个位置进行插入。

尾插是在顺序表所有数据接下来的位置插入。

任意位置则是在顺序表的任意一个位置插入, 这时分两种情况。

第一种情况在最后一个数据之前插入:

 

第二种情况是在最后一个数据之后插入。 这个时候无论这个位置多大, 都是挨着最后一个数据插入。

 

同时, 尾插和头插是可以通过调用任意位置插入实现。为什么这么说?

我在这里先写一下任意位置插入的函数接口声明

.h声明:

我如果调用该函数时,pos形参传的时ps->size. 那么就是尾插, 传0就是头插 

 ​​​​​​​

 所以只要我们写个任意位置插入, 尾插头插进行对他进行复用就行。 

.c函数接口实现

现在我们来检查一下我们是否写对了。这里用到了我们写的打印函数。​​​​​​​ 

ok, 没问题,继续往下走。

现在写头插和尾插就容易了。

.h函数声明

.c函数实现:

 

顺序表的删除函数接口 

顺序表删除函数接口, 和顺序表的插入函数接口一样, 我们如果写一个任意位置的删除函数接口, 然后复用, 就能很快的写出尾删和, 头删的函数接口。 

任意位置的删除情况如下有两种情况。 

情况1, 要删除的位置大于最后一个数据的位置, 删除的永远是最后一个位置。

情况二, 要删除的位置在数据的中间。

.h函数声明 

.c函数的实现

 

现在来测试一下是否有错误: 

ok, 没有错误,  其实到了这里就差不多了, 只剩下尾删和头删了。

.h声明: 

 .c文件函数接口实现

 

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Android Gradle开发与应用 (二) : Groovy基础语法

1. Groovy是什么 Groovy是基于JVM虚拟机的一种动态语言,语法和Java非常相似,并能够无缝地与Java代码集成和互操作,增加了很多动态类型和灵活的特性。(闭包、DSL) 语法和Java非常相似这个特点,意味着,如果我们完全不懂…

[ffmpeg] x264 配置参数解析

背景 创建 x264 编码器后,其有一组默认的编码器配置参数,也可以根据需要修改参数,来满足编码要求。 具体参数 可修改的参数,比较多,这边只列举一些常用的。 获取可以配置的参数 方式1 查看 ffmpeg源码 libx264.c…

通用检测大模型 | 华科白翔团队提出以对象为中心的基础模型GLEE

本文首发: AIWalker https://arxiv.org/abs/2312.09158 https://glee-vision.github.io AIWalker后台回复【GLEE】即可下载原文与译文。 在这项工作中,我们提出了GLEE:一个对象级的基础模型,用于定位和识别图像和视频中的对象。 通过一个统一…

第二节:Vben Admin 登录逻辑梳理和对接后端准备

系列文章目录 上一节:第一节:Vben Admin介绍和初次运行 文章目录 系列文章目录前言项目路径的概述一、登录逻辑梳理loginApi接口查看Mock 二、后端程序对接准备关闭Mock 总结 前言 第一节,我们已经配置了前端环境,运行起来了我们…

查看笔记本电池健康状态-windows11

在 Windows 11 中获取详细的电池报告 Windows 11 中内置的 Powerfg 命令行选项来生成电池报告。 在任务栏上选择“搜索”,键入“cmd”,长按(或右键单击)“命令提示符”,然后选择“以管理员身份运行” ->“是”。 …

【Flink精讲】Flink性能调优:CPU核数与并行度

常见问题 举个例子 提交任务命令: bin/flink run \ -t yarn-per-job \ -d \ -p 5 \ 指定并行度 -Dyarn.application.queuetest \ 指定 yarn 队列 -Djobmanager.memory.process.size2048mb \ JM2~4G 足够 -Dtaskmanager.memory.process.size4096mb \ 单个 TM2~8G 足…

自动驾驶---行业发展及就业环境杂谈

进入21世纪以来,自动驾驶行业有着飞速的发展,自动驾驶技术(L2---L3)也逐渐落地量产到寻常百姓家。虽然最早期量产FSD的特斯拉有着深厚的技术积累,但是进入2010年以后,国内的公司也逐渐发展起来自己的自动驾…

【Java程序员面试专栏 算法思维】二 高频面试算法题:二分查找

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊二分查找,包括基础二分,寻找目标值的左右边界,搜索旋转数组以及波峰,以及x的平方根问题,所以放到一篇Blog中集中练习 题目关键字解题思路时间空…

python常用文件操作

1.文件夹创建,删除,重命名,路径连接,文件打开,关闭读写 #文件夹创建 path ./test newpath "./new" #判断文件夹是否存在 ret os.path.exists(path) if ret:pass else:#创建文件夹os.mkdir(path)#文件夹重…

查看mysql数据库的版本

要查看MySQL数据库的版本,可以使用以下几种方法: 命令行(已连接到MySQL服务器): 登录到MySQL服务器后,在MySQL提示符下执行: mysql> SELECT VERSION(); 或者,也可以执行 STATUS; …

[C++]C++中memcpy和memmove的区别总结

这篇文章主要介绍了C中memcpy和memmove的区别总结,这个问题经常出现在C的面试题目中,需要的朋友可以参考下 变态的命名 我们在写程序时,一般讲究见到变量的命名,就能让别人基本知道该变量的含义。memcpy内存拷贝,没有问题;memmove&#xff…

大数据开发项目--音乐排行榜

环境:windows10,centos7.9,hadoop3.2、hbase2.5.3和zookeeper3.8完全分布式; 环境搭建具体操作请参考以下文章: CentOS7 Hadoop3.X完全分布式环境搭建 Hadoop3.x完全分布式环境搭建Zookeeper和Hbase 1. 集成MapReduce…

【03】逆序数组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、逆序函数是什么? 二、逆序函数原码 1.直接逆序 2.创建临时数组逆序 三、结言 💥一、逆序函数是什么? 示例:输入1 4 …

springBoot整合Redis(一、Jedis操作Redis)

在springboot环境下连接redis的方法有很多,首先最简单的就是直接通过jedis类来连接,jedis类就相当于是redis的客户端表示。 但是因为现在比较常用的是:StringRedisTemplate和RedisTemplate,所以jedis只做简单的介绍。 一、Jedis…

强化学习(GPS)

GPS——Guided Policy Search引导策略搜索 基于模型的强化学习算法 GPS目前被作为基础算法广泛应用于各种强化学习任务中,其出发点在于纯粹的策略梯度方法在更新参数时不会用到环境模型因而属于一种无模型强化学习算法。由于没有利用任何环境的内在属性&#xff0…

在线网络代理转发NPClient

NPClient操作方式: 用浏览器打开网站http://101.35.247.87:9000/ 点击注册 输入注册的用户名和密码,就会进入如下界面: 点击登录 输入用户名和密码后进入如下界面: 点击下载代理客户端,下载时要稍微等一下&#xff0c…

【hashmap】【将排序之后的字符串作为哈希表的键】【获取 HashMap 中所有值的集合】Leetcode 49 字母异位词分组

【hashmap】【将排序之后的字符串作为哈希表的键】【获取 HashMap 中所有值的集合】Leetcode 49 字母异位词分组 解法1 将排序之后的字符串作为哈希表的键解法2 在解法一的基础上加入了getOrDefault ---------------🎈🎈题目链接🎈&#x1f3…

K—近邻算法实际应用案例

K—近邻算法实际应用案例 1. 案例1:鸢尾花种类预测1.1 数据集获取和属性介绍1.1.1 scikit-learn中的数据集介绍1.1.2 sklearn数据集返回值介绍 1.2 数据可视化介绍(查看数据分布)1.3 数据集的划分1.4 特征工程1.4.1 归一化1.4.2 标准化 1.5 鸢…

09 呼吸灯

呼吸灯简介 呼吸灯实际展示的效果就是一个 LED 灯的亮度由亮到暗,再由暗到亮的变化过程,并且该过程是循环往复的,像呼吸一样那么有节奏。 呼吸灯通常是采用 PWM(Pulse Width Modulation,即脉冲宽度调制) 的方式实现,在…

zabbix监控业务数据

前言 监控系统除了监控os和数据库性能相关的指标外,业务数据也是重点监控的对象。 一线驻场的运维同学应该深有体会,每天需要向甲方或者公司反馈现场的数据情况,正常情况下一天巡检两次,早上上班后和下午下班前各一次。监控项目…