数据结构之顺序表,实现顺序表的增删改查
目录
一、顺序表的概念
二、顺序表的分类
1.静态顺序表
2.动态顺序表
3.顺序表的增删改查
总结
一、顺序表的概念
顺序表是一段物理地址连续的村塾单元依次存储数据元素的线性结构,一般情况下使用数组存储,在数组上完成数据的增删改查。
二、顺序表的分类
1.静态顺序表
使用定长数组存储元素
#define N 7typedef int SLDataType;typedef struct SeqList{SLDataType array[N]; //定长数组size_t size ; //有效数据的个数
}SeqList;
静态顺序表只适用于确定需要多少数据的情况,N大了空间浪费,N小了不够用,所以一般用动态顺序表,按需分配空间。
2.动态顺序表
使用动态开辟的数组存储
//顺序表的动态存储
typedef struct SeqList
{SLDataType * array; //指向动态开辟的数组size_t size; //有效的数据个数sieze_t capacity; //容量空间的大小
}SeqList;
3.顺序表的增删改查
- 顺序表的初始化
顺序表为一个结构体,里面有3个参数:指向数组的指针,顺序表中的有效数字个数,顺序表的大小,初始化的时候全部置空
//顺序表的初始化
void SLInit(SL * ps)
{assert(ps);ps->a = NULL;ps->size = 0;ps->capacity = 0;
}
- 尾插
首先,在尾部插入数据,先判断顺序表中的大小是否能插入,如果不能,需要扩容,如果可以插入,则要找到尾的位置,然后把数据放入,放入的时候根据size找下标,放入a中。ps->a[ps->size];此时size++
void SLCheckCapacity(SL * ps)
{assert(ps);//如果容量满了if(ps->size == ps->capacity){//如果是第一次开辟空间 给4个字节 // 后面开辟,扩容到二倍int newCapacity = ps->capacity == 0 ?4: ps->capacity * 2;//扩容的地址 realloc 形参为第一次开辟的地址和要扩容的大小 //要扩容的单位 字节 字节个数=扩容几个 * 类型SLDataType * tmp = (SLDataType * ) realloc(ps->a, newCapcity * sizeof(SLDataType));//如果开失败if(tmp == NULL){perror("realloc fail");exit(-1);}//开成功 地址给a (realloc可能为原地也可能为异地) 相当于一次原地扩容ps->a = tmp;// 容量大小改变ps->capacity = newCapacity;
}void SLPushBack(SL * ps,SLDataType x)
{assert(ps);//检查容量SLCheckCapacity(ps);ps->a[ps->size] = x; //x要放入a数组中,根据现在的数据个数(即数组的最后一个)找下标赋值插入ps->size++;
}
- 尾删
先判断顺序表是否删空了,如果空了返回。如果不空,a数组中的尾部位置数置0,size--.
void SLPopBack(SL * ps)
{assert(ps);assert(ps->size >0);ps->a[ps->size-1] = 0; //注意下标的位置,size是有效数据个数,size-1是最后一个数的位置ps->size--;
}
- 头插
插入之前需要先判断能否插入,使用checkCapacity检查,如果可以插入,头插,需要把后面的数字往后挪,往后挪有两种方式:从前往后,从后往前,此时需要从后往前,否则会覆盖掉后一个数字,挪动结束后,第一个位置插入,插入之后size++
//头插
void SLPushFront(SL * ps,SLDataType)
{assert(ps);SLCheckCapacity(ps);//挪动数据int end = ps->size-1;while(end>=0){ps->a[end+1]= ps->a[end];end--;}ps->a[0] = x;ps->size++;
}
- 头删
先判断是否为空的顺序表,然后删除第一个,后面的数据往前挪动,挪动的时候从前往后挪,不会覆盖,删除结束之后size--
//头删
void SLPopFront(SL * ps)
{assert(ps->size >0)int begin = 1; //注意这里begin设置为1 while(begin<ps->size){ps->a[begin-1] = ps->a[begin]; //覆盖前一个begin++;}ps->size--;
}
- 查找
遍历顺序表, 根据数据查找位置,找到了就返回数据的下标
int Find(SL * ps, SLDataType x)
{assert(ps);for(int i = 0;i<ps->size;i++){if(ps->a[size] == x){return i;}}//没找到return -1;
}
- 在pos位置插入x
先判断pos位置的合法性,是否在这个顺序表的范围里,然后判断是否能插入,如果不可以,需要扩容;如果可以插入,pos位置之后的先往后挪动,end>=pos,然后pos位置插入数据
void SLInsert(SL * ps,SLDataType x)
{assert(ps);//判断pos的合法性 在这个顺序表中assert(pos>=0);assert(pos<=ps->size);//判断是否要扩容SLCheckCapacity(ps);int end = ps->size - 1;//pos位置之后的挪动 往后挪while(end>=pos){ps->a[end+1] = ps->a[end];end--;}ps->a[pos] = x;ps->size++;
}
- 在pos位置删除x
先判断pos的合法性,判断顺序表是否为空,如果可以删除,pos位置之后的往前挪动,size--
void SLErase(SL * ps,int pos)
{assert(ps);assert(pos>=0);assert(pos<=ps->size);assert(ps->size >0);//挪动数据覆盖int begin = pos+1;while(begin<ps->size){ps->a[begin-1] = ps->a[begin];begin++;}ps->size--;
- 顺序表的打印
遍历打印即可,打印数组中的内容
void SLPrint(SL * ps)
{assert(ps);for(int i = 0;i<ps->size;i++){printf("%d",ps->a[i];);}
}
- 顺序表的销毁
将顺序表中的数组内容置空,size和capacity均置空
void SLDestroy(SL * ps)
{assert(ps);if(ps->a){free(ps->a);ps->a = NULL;ps->size = ps->capacity = 0;}}
总结
本文主要介绍了顺序表的结构,以及对顺序表的操作:增删改查等。如有错误请指正。
相关文章:
数据结构之顺序表,实现顺序表的增删改查
目录 一、顺序表的概念 二、顺序表的分类 1.静态顺序表 2.动态顺序表 3.顺序表的增删改查 总结 一、顺序表的概念 顺序表是一段物理地址连续的村塾单元依次存储数据元素的线性结构,一般情况下使用数组存储,在数组上完成数据的增删改查。 二、顺…...
HTB-Jeeves
HTB-Jeeves信息收集80端口50000端口开机kohsuke -> Administrator信息收集 80端口 ask jeeves是一款以回答用户问题提问的自然语言引擎,面对问题首先查看数据库里是否…...
大力出奇迹——GPT系列论文学习(GPT,GPT2,GPT3,InstructGPT)
目录说在前面1.GPT1.1 引言1.2 训练范式1.2.1 无监督预训练1.2.2 有监督微调1.3 实验2. GPT22.1 引言2.2 模型结构2.3 训练范式2.4 实验3.GPT33.1引言3.2 模型结构3.3 训练范式3.4 实验3.4.1数据集3.5 局限性4. InstructGPT4.1 引言4.2 方法4.2.1 数据收集4.2.2 各部分模型4.3 …...
Linux ubuntu更新meson版本
问题描述 在对项目源码用meson进行编译时,可能出现以下错误 meson.build:1:0: ERROR: Meson version is 0.45.1 but project requires > 0.58.0. 或者 meson_options.txt:1:0: ERROR: Unknown type feature. 等等,原因是meson版本跟设置的不适配。 …...
匹配yyyy-MM-dd日期格式的正则表达式
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ 解释: ^:匹配行的开头 \d{4}:匹配四个数字,表示年份 -:匹配一个横杠 (0[1-9]|1[0-2]):匹配01到12的月份,0开头的要匹配两位数字,1开…...
【失业预告】生成式人工智能 (GAI)AIGC
文章目录AIGCGAIAGI应用1. 计算机领域2. 金融领域3. 电商领域4. C端娱乐5. 游戏领域6. 教育领域7. 工业领域8. 医疗领域9. 法律领域10. 农业/食品领域11. 艺术/设计领域来源AIGC AIGC,全称为Artificial Intelligence Generated Content,是一种新型的人工…...
TensorFlow 2.0 的新增功能:第一、二部分
原文:What’s New in TensorFlow 2.0 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如何实现目…...
Spring Boot配置文件详解
前言 Spring Boot 官方提供了两种常用的配置文件格式,分别是properties、YML格式。相比于properties来说,YML更加年轻,层级也是更加分明。 1. properties格式简介 常见的一种配置文件格式,Spring中也是用这种格式,语…...
实习面试题整理1
1、进行一下自我介绍 2、介绍一下你简历里的两个项目 3、说说vue的生命周期(具体作用) 4、说说你对vue单页面和多页面应用的理解 5、说说vue里自带的数组方法(七种,往响应式数据上靠) 6、说说vue双向数据绑定&…...
最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,看看你差了多少...
互联网大厂新入职员工各职级薪资对应表(技术线)~ 最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比 上面的表格不排除有很极端的收入情况,但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况,非技术线(如产品、运营、…...
OpenCV——常用函数
cv::circle(overlay, pt, 2, cv::Scalar(0,green,red),-1); 使用OpenCV库中的circle()函数在图像上绘制圆形的代码。 具体来说,它的参数如下: - overlay:图像,在该图像上绘制圆形; - pt:圆心位置的cv:…...
超详细从入门到精通,pytest自动化测试框架实战-fixture多样玩法(九)
目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 在编写测试用例&…...
OJ练习第70题——困于环中的机器人
困于环中的机器人 力扣链接:1041. 困于环中的机器人 题目描述 在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意: 北方向 是y轴的正方向。 南方向 是y轴的负方向。 东方向 是x轴的正方向。 西方向 是x轴的负方向。 机器人可以接受…...
运行时内存数据区之虚拟机栈——局部变量表
这篇内容十分重要,文字也很多,仔细阅读后,你必定有所收获! 基本内容 与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stack)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型…...
Java中常用算法及示例-分治、迭代、递归、递推、动态规划、回溯、穷举、贪心
场景 1、分治算法的基本思想是将一个计算复杂的问题分成规模较小、计算简单的小问题求解, 然后综合各个小问题,得到最终答案。 2、穷举(又称枚举)算法的基本思想是从所有可能的情况中搜索正确的答案。 3、迭代法(Iterative Method) 无法使用公式一次…...
2个 windows 下的网络测试工具
环境windows 10 64bittcpingtcproute简介TCPing 和 TCProute 都是 windows 下的用于测试 TCP 连接的工具,它们可以帮助用户确定网络连接的可用性和响应时间。TCPing下载地址: https://elifulkerson.com/projects/tcping.phpTCPing 通过向目标主机发送 TC…...
HDU - 4734 -- F(x)
题目如下: For a decimal number x with n digits (AnAn−1An−2...A2A1)(A_nA_{n-1}A_{n-2} ... A_2A_1)(AnAn−1An−2...A2A1), we define its weight as F(x)An∗2n−1An−1∗2n−2...A2∗2A1∗1.F(x) A_n * 2^{n-1} A_{n-1} * 2^{n-2} ... A_2 *…...
【音视频第10天】GCC论文阅读(1)
A Google Congestion Control Algorithm for Real-Time Communication draft-alvestrand-rmcat-congestion-03论文理解 看中文的GCC算法一脸懵。看一看英文版的,找一找感觉。 目录Abstract1. Introduction1.1 Mathematical notation conventions2. System model3.Fe…...
如何进行移动设备资产管理
随着越来越多的移动设备进入和访问组织的企业资源,管理员必须监视和控制对企业数据的访问。与传统工作站不同,传统工作站位于企业的物理工作区内,移动设备从多个位置使用,从而使移动资产管理过程更加复杂。 什么是移动资产管理 …...
使用国密SSL证书,实现SSL/TLS传输层国密改造
密码是保障网络空间安全可信的核心技术和基础支撑,通过自主可控的国产密码技术保护重要数据的安全,是有效提升我国信息安全保障水平的重要举措。因此,我国高度重视商用密码算法的应用并出台相关政策法规,大力推动国产商用密码算法…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
