数据结构之顺序表,实现顺序表的增删改查
目录
一、顺序表的概念
二、顺序表的分类
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传输层国密改造
密码是保障网络空间安全可信的核心技术和基础支撑,通过自主可控的国产密码技术保护重要数据的安全,是有效提升我国信息安全保障水平的重要举措。因此,我国高度重视商用密码算法的应用并出台相关政策法规,大力推动国产商用密码算法…...
DXVK性能优化:让老旧系统重获新生的完美方案
DXVK性能优化:让老旧系统重获新生的完美方案 【免费下载链接】dxvk Vulkan-based implementation of D3D9, D3D10 and D3D11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 为什么老旧电脑运行新程序总是卡顿?DXVK如何解决…...
2026年03月27日全球AI前沿动态
一句话总结AI领域覆盖通用/垂直大模型、智能体应用、物理机器人、硬件算力、企业战略、产品更新、投融资、行业观点、民生教育、研究资源全维度,国产技术密集突破、智能体全面落地、硬件自研提速、安全风险频发、老年AI教育落地,行业向实用化、国产化、安…...
告别ZooKeeper!ClickHouse Keeper双机集群搭建全攻略(含常见报错解决方案)
ClickHouse Keeper双机集群实战指南:从零搭建到故障排查 1. 为什么选择ClickHouse Keeper替代ZooKeeper 在ClickHouse集群架构中,协调服务一直扮演着关键角色。传统方案依赖ZooKeeper实现分布式协调,但这种方式存在几个明显痛点: …...
Llama-3.2V-11B-cot企业级应用:双卡4090支撑的生产环境视觉推理服务搭建
Llama-3.2V-11B-cot企业级应用:双卡4090支撑的生产环境视觉推理服务搭建 1. 项目概述 Llama-3.2V-11B-cot是基于Meta最新多模态大模型开发的高性能视觉推理工具,专为企业级生产环境设计。该工具针对双卡NVIDIA RTX 4090环境进行了深度优化,…...
《其他 W3C 活动》
《其他 W3C 活动》 引言 W3C(World Wide Web Consortium,万维网联盟)是全球领先的互联网技术标准制定机构。自1994年成立以来,W3C致力于推动互联网技术的标准化,为全球的互联网发展做出了重要贡献。除了核心的HTML、CS…...
nli-distilroberta-base生产环境:金融风控中合同条款中立性识别实践
nli-distilroberta-base生产环境:金融风控中合同条款中立性识别实践 1. 项目背景与价值 在金融风控领域,合同条款的准确理解至关重要。传统人工审核方式效率低下且容易遗漏关键细节,而自然语言理解技术可以大幅提升审核效率和准确性。nli-d…...
Word空白页删不掉?【图文讲解】怎么删除word空白页?word批量删除空白页?5种方法教你彻底删除
(1)问题背景谁在编辑 Word 时没被顽固空白页气到抓狂?写论文、做报告、整理文案,明明内容已经结束,页面末尾偏偏多出一页空白,删也删不掉、退也退不去。打印时白白浪费纸张,上交文档显得格外不专…...
深入解析Shim在跨版本API兼容中的实战应用
1. 什么是Shim技术 第一次听到"Shim"这个词是在调试一个Flink连接Hive的项目时。当时Hive版本从2.3升级到3.1,本以为要重写大量代码,结果同事说"加个Shim就行了"。这种"神奇胶水"般的技术让我印象深刻。 Shim本质上是一种…...
新型电力系统数据底座选型:源网荷储四侧时序数据库实战应用
文章目录 一、新型电力系统到底哪里变了?二、电力新业态带来的数字化挑战首先是采集数据的挑战其次是关于实时性的挑战最后是关于计算复杂度的挑战 三、新需求下传统架构已显疲态数据存储割裂实时计算与离线分析的割裂计算引擎分散,维护成本高规则变化时…...
GitHub Desktop中文汉化工具:让Git操作变得像聊天一样简单
GitHub Desktop中文汉化工具:让Git操作变得像聊天一样简单 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Desktop满屏的英文而头疼吗&#x…...
