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

目录

准备文件

创建顺序表蓝图

顺序表初始化函数接口

 顺序表的销毁函数接口

顺序表的打印函数接口 

顺序表的插入函数接口 

顺序表的删除函数接口 


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

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

这就是顺序表。 

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

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

准备文件

先准备好三个文件

两个.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://www.mzph.cn/news/702546.shtml

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

相关文章

LeetCode49 字母异位词分组

LeetCode49 字母异位词分组 在这篇博客中,我们将探讨 LeetCode 上的一道经典算法问题:字母异位词分组。这个问题要求将给定的字符串数组中的字母异位词组合在一起,并以任意顺序返回结果列表。 问题描述 给定一个字符串数组 strs&#xff0…

并发编程基础

为什么开发中需要并发编程? 加快响应用户的时间使你的代码模块化、异步化、简单化充分利用CPU资源 基础概念 进程和线程 进程 我们常听说的应用程序,由指令和数据组成。当我们不运行应用程序时,这些应用程序就是放在磁盘上的二进制的代码…

【MATLAB】mlptdenoise信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码,请转文末观看代码获取方式~ 展示出图效果 1 mlptdenoise分解算法 MLPT denoise(Maximum Likelihood Parameter-Tuned Denoise)是一种基于小波变换的信号分解算法,它可以将信号分解为多个具有不同频率特性的小波分…

LeetCode 2859.计算K置位下标对应元素的和

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 请你用整数形式返回 nums 中的特定元素之 和 ,这些特定元素满足:其对应下标的二进制表示中恰存在 k 个置位。 整数的二进制表示中的 1 就是这个整数的 置位 。 例如,21 的二进制表示…

Threejs 实现3D影像地图,Json地图,地图下钻

1.使用threejs实现3D影像地图效果,整体效果看起来还可以,底层抽象了基类,实现了通用,对任意省份,城市都可以只替换数据,即可轻松实现效果。 效果如下: 链接https://www.bilibili.com/video/BV1…

Javascript 函数和对象

【六】函数 函数(Function)是一种可重复使用的代码块,用于执行特定的任务或计算,并可以接受参数和返回值。 【1】函数声明 function functionName(parameter1, parameter2, ...) {// 函数体// 执行特定的任务或计算// 可以使用…

H5/CSS 笔试面试考题(91-100)

简述div 元素的哪些 CSS 属性的默认值为 0 ( ) A:border-top-width B:outline-width C:padding-top D:margin-top 面试通过率:76.0% 推荐指数: ★★★ 试题难度: 初级 试题类型: 选择题 答案:c、d 简述下列关于背景定位属性 background-position 说法正确的是 ( ) A:…

嵌入式学习笔记总结Day24

今天进入了下一个阶段的学习——进程与线程的学习 今天主要了解了进程的相关知识以及linux系统中对进程进行控制的一些函数接口 一、概念 程序:存放在外存中的一段数据组成的文件 进程:是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消…

【人工智能高频面试题--基本篇】

🚀 作者 :“码上有前” 🚀 文章简介 :人工智能高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 人工智能高频面试题--基本篇 1.深度学习和过往的神经网络训练方法有什么区别?列举…

Linux互斥体的驱动程序测试

一. 简介 上一篇文章学习如何在驱动代码中使用互斥锁。文章地址如下: Linux内核中处理并发与竞争的互斥体的驱动实现-CSDN博客 本文对所实现的驱动进行测试。确定互斥锁是否实现对 Led设备的互斥访问,即一次只能一个应用程序访问Led设备。 二. Linux互斥体的驱动程序测试…

LED流水灯实验

#include "reg52.h" #include <intrins.h> //包含函数_crol_,_cror_ typedef unsigned int u16; //对系统默认参数重新定义 typedef unsigned char u8; #define LED_PORT P2 //使用宏定义P2端口 void delay_10…

Panalog大数据日志审计系统libres_syn_delete.php命令执行漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 1、产品简介 Panalog大数据日志审计系统定位于将大数据产品应用于高校…

Element UI 组件的安装及使用

Element UI是基于Vue.js 的一套企业级的前端UI 组件库&#xff0c;它包含了丰富的UI组件供开发者使用&#xff0c;极大的提高生产效率。这篇文章将帮你快速了解Element UI的安装和使用。 一、安装 Element UI 首先&#xff0c;你需要在你的环境中安装Node.js&#xff0c;因为…

【.xml文件匹配不到】⭐️解决使用mybatis-plus找不到对应的xml文件导致的持久层方法报错

前言 小伙伴们大家好&#xff0c;很快嗷&#xff0c;到了年后的第一周&#xff0c;最近在自己电脑上敲项目时遇到一个平时可能不怎么遇到的问题&#xff0c;就是mybatis持久层框架使用时找不到对应的xml配置文件&#xff0c;也就导致自己写的持久层方法报错 接口报错内容&…

win11修改网络算法为BBR2_提升网络环境质量

Win11 BBR2 是Google开发的一种高效的网络拥塞控制算法&#xff0c;玩 Linux 的朋友应该对它还有锐速不陌生。相比Windows默认使用的 CUBIC 算法&#xff0c;BBR2 在网络吞吐量、延迟、全局性能等方面都有一定优势。 如果你日常网络经常丢包或者高延迟可以尝试切换为BBR2算法。…

实施工程师前后端项目部署流程一次完成

目录 一、jdk安装具体步骤 二、tomcat安装具体步骤 三、MySql具体步骤 修改密码 登录 四、nginx安装 4.1、Nginx 4.2、操作步骤 安装ssl证书&#xff08;https&#xff09; 开80端口 测试 设置自启动 五、后端部署tomcat负载均衡 5.1、为什么要使用 5.2、搭建ngin…

抖音视频提取软件怎么用|抖音数据抓取工具

针对用户获取抖音视频的需求&#xff0c;我们开发了一款功能强大的抖音视频提取软件&#xff0c;旨在帮助用户轻松获取他们感兴趣的视频内容。无需逐个复制链接&#xff0c;无需繁琐的下载步骤&#xff0c;我们的软件让抖音视频获取变得简单快捷。 使用我们的软件非常简单&…

Open3D 基于最小生成树的法线定向 (27)

Open3D 基于最小生成树的法线定向 (27) 一、算法介绍二、算法实现一、算法介绍 法线计算的方向通常都存在方向问题,用Open3D估计的点云法线,是在每个点的局部进行拟合,估计的法线方向并不一致,Open3D提供了使用最小生成树调整法线到统一方向的方法,下面是具体的实现代码…

停车场管理(C语言)

【题目描述】停车场管理。设有一个可以停放n辆汽车的狭长停车场&#xff0c;它只有一个大门可以供车辆进出。车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放 (即最先到达的第一辆车停放在停车场的最里面) 。如果停车场已放满n辆车&#xff0c;则以后到达的车…

从Unity到Three.js(outline 模型描边功能)

指定模型高亮功能&#xff0c;附带设置背景颜色&#xff0c;获取随机数方法。 百度查看说是gltf格式的模型可以携带PBR材质信息&#xff0c;如果可以这样&#xff0c;那就完全可以在blender中配置好材质导出了&#xff0c;也就不需要像在unity中调整参数了。 import * as THRE…