重生之我 学习【数据结构之顺序表(SeqList)】
⭐⭐⭐
新老博友们,感谢各位的阅读观看
期末考试&假期调整暂时的停更了两个多月
没有写博客为大家分享优质内容
还容各位博友多多的理解
美丽的八月重生之我归来
继续为大家分享内容
你我共同加油
一起努力
⭐⭐⭐
数据结构将以顺序表、链表、栈区、队列、二叉树、常见排序算法为主要内容展开学习
这里的数据结构是C语言实现的
道阻且长,行则将至
🌹博主:宝哈 CSDN主页🌹
期待与你的交流学习
说在前面的话
数据结构是计算机存储、组织数据的方式,指的是相互之间存在的一种或多种特定关系的数据元素集合。数据本就是杂乱无章的,当我们对数据进行管理,形成一定的结构体系,数据才能有序存放便于我们存储和使用。数据结构将着力提升大家的算法能力,前期的C语言只是简单的为大家罗列了一些简答的知识点,现在我们将打开代码学习的魔幻大门,或许到这里我们才算得上代码学习刚入门。
前面我们已经学习了语言的基本内容:数组、指针、结构体、动态内存管等内容,这些都为今天我们学习数据结构做了铺垫,开启代码学习的新篇章——数据结构 ,在日常生活中我们要处理大量的数据,数据的统一管理,便于我们对数据增删查改,一些数据的内容过于庞大,高效便捷的管理需要我们对这些数据进行处理,那么如何处理好这些数据,就是我们接下来要学习的内容。
线性表
先来介绍线性表:
线性表在实际应用中非常广泛,比如数组、栈、队列等都可以看作是线性表的不同形式或在不同操作限制下的特殊结构,理解和掌握线性表对于深入学习数据结构至关重要。
物理结构:数据在内存中存储的一种形式
逻辑结构:人为想想出的一种数据结构形式,如线性关系、
线性表在逻辑结构上一定是线性的,在物理结构上不一定是线性的
今天介绍的顺序表是线性表的一种
顺序表(Sequence List)分类
存储。
顺序表的底层逻辑是数组,在数组的基础上增加了增删查改的功能完成对数组的封装。
可以这样理解顺序表:
顺序表=数组+增加数据+删除数据+修改数据+查找数据
前期学习的数组,我们知道数组可分为静态数组和动态数组,静态的数组的大小往往限制我们都数据进行一系列的操作,动态数组更受大家的青睐。
/*静态数组*/
int shuzu[10]={ }/*动态数组 动态数组内存开辟*/
int* shuzu/*确定好大小后再去申请*/
顺序表中对数组进行封装会使用结构体进行
静态顺序表
顺序表的空间已经确定,空间少了不够用空间多了浪费空间。
当空间过小会造成数据的丢失,空间远大于目前需求量需要资金的支持较大。
/*静态顺序表的定义*/struct Seqlist
{
int arr[100]; //定长数组(在预估范围内操作)
int size; //当前有效数据的个数};//静态顺序表
typedef int SLDataType //替换第四行的int
#define N 10
typedef struct SeqList {SLDataType a[N]; //int被代替后 便于替换int size;
}SL;
动态顺序表
解决了静态数据表的痛点
/*动态顺序表的定义*/
struct Seqlist
{int*shuzu; //int size; //有效数据的个数 实际空间大小int capacity;//空间的大小 容器的能存量
};//动态顺序表
typedf struct SeqList
{SLDateType* a;int size;int capacity;}SL;
一键替换:这里使用typedef内容更换,方便代码量庞大时的替换数据的类型
动态数据表的实现
在实际的操作中通常我们需要三个文件来实现顺序表的功能:
一个.h头文件:头插文件用于存放顺序表的定义、接口声明、引用的头文件。等同于目录
两个.c源文件:顺序表各函数的实现
测试顺序表的各功能

我们创建了三个文件进行创建后进行初始化,并对初始化的第一步进行了测试(详见下图)

出现上述问题的原因在于对传值和传地址的理解
⭐传值:
实参保存的值拷贝一份给形参,实参和形参指向的是两块不同的地址,但保存的数据是一样的(形参是实参的值真实拷贝)
⭐传地址:
形参指向的就是实参的地址

初始化
头文件
#pragma once
#include<stdio.h>
#include<stdlib.h>
typedef int SLDataTyre;
//动态顺序表
typedef struct SeqList
//等同于typedef struct SeqList SL;
{SLDataTyre* arr;int size; //有效数据个数int capacity;//空间大小
}SL;//初始化顺序表
void SLInit(SL* ps);//销毁顺序表
void SLDestory(SL*ps);//插入数据
void SLPushBack(SL* ps, SLDataTyre x);void SLPushFront(SL* ps, SL
源文件(实现功能文件)
#include"seqencelist.h"
//初始化顺序表
void SLInit(SL* ps)
{ps->arr = NULL;ps->size = 0;ps->capacity = 0;//初始的数组为空 有效数据和空间大小都为0
}
//销毁顺序表
void SLDestory(SL* ps)
{if (ps->arr)//(pa->arr!=NULL){free(ps->arr);//释放空间}ps->arr = NULL;ps->size = 0;ps->capacity = 0;
}void SLPushBack(SL* ps, SLDataTyre x)
{}void SLPushFront(SL* ps, SLDataTyre x)
{}
源文件(测试文件)
#include"seqencelist.h"
void SLText01()
{SL s;SLInit(&s);
}
int main()
{SLText01();return 0;
}
尾插
空间充足时
在顺序表的末尾加入数据,size++
空间不足时
新增容(增容一般是成倍数增加的),再在顺序表的末尾加入数据,size++
增容
增容操作本身就会对程序的性能进行一定的消耗,频繁的增容会导致程序的效率低下,采用成倍数的增加方式,一般情况下空间增量和数据的个数是正相关的
头插
void SLPushFront(SL* ps, SLDataType x)
{assert(ps);SLCheckCapacity(ps);//判断空间是否足够//数据整体后移动一位for (int i = ps->size; i > 0; i--){ps->arr[i] = ps->arr[i - 1];}//下标为0的位置ps->arr[0] = x;ps->size++;}
⭐下一篇将带来顺序表的剩余内容和单链表
相关文章:
重生之我 学习【数据结构之顺序表(SeqList)】
⭐⭐⭐ 新老博友们,感谢各位的阅读观看 期末考试&假期调整暂时的停更了两个多月 没有写博客为大家分享优质内容 还容各位博友多多的理解 美丽的八月重生之我归来 继续为大家分享内容 你我共同加油 一起努力 ⭐⭐⭐ 数据结构将以顺序表、链表、栈区、队列、二叉树…...
前端day4-表单标签
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>day4-表单</title> </head> <body&g…...
vue3-print-nb 表格打印分页,第一页有空白的情况出现解决方法(两种:一种原生,一种基于element表格)
第一种:基于element表格分页 <template><!-- element分组打印 --><div class"hello"><button v-print"printContent">打印</button><div id"printDiv"><p>工资统计表</p><p>…...
搜维尔科技:借助 Xsens中的远程人体录制功能,可以在任何位置以无限量同时捕捉无限数量演员的身体动作
借助 Xsens中的远程人体录制功能,可以在任何位置以无限量同时捕捉无限数量演员的身体动作 搜维尔科技:借助 Xsens中的远程人体录制功能,可以在任何位置以无限量同时捕捉无限数量演员的身体动作...
2024/08 近期关于AI的阅读和理解[笔记]
#Cohere 就像商业能力很强的云数仓公司 Snowflake 一样,Cohere 也采用了按需付费模式而不是按月或按年付费,而且它的付费模式很精细。Cohere 按照模型的不同能力,包括文本生成,文本总结,重新排名,文本分类…...
SmartEDA:解锁设计新境界,从工具到灵感的飞跃之旅!
在这个数据驱动的时代,每一次点击、每一次滑动都蕴含着无限的可能与洞察。然而,在众多数据分析工具中,SmartEDA不仅仅是一把解锁数据奥秘的钥匙,它更是一座桥梁,连接着冰冷的数据世界与创意无限的设计灵感之源。今天&a…...
解决Minizip压缩后解压时的头部错误问题
最近,在处理文件压缩的任务时,我遇到了一个有趣的问题。使用Minizip库进行文件压缩后,在解压过程中收到了一个关于"头部错误"的警告。尽管这个警告看似令人担忧,但解压操作最终仍然能够成功完成文件的解压。这引发了我的…...
数据库表水平分割和垂直分割?
0.数据库表的水平分割和垂直分割是两种常见的数据库优化技术,它们分别针对不同的场景和需求进行数据表的拆分。 1. 水平分割(Horizontal Splitting)主要是按照记录进行分割,即不同的记录被分开保存在不同的表中&#x…...
Linux源码阅读笔记18-插入模型及删除模块操作
基础知识 模块是一种向Linux内核添加设备驱动程序、文件系统及其他组件的有效方法,不需要编译新内核 优点 通过使用模块,内核发布者能够预先编译大量驱动程序,而不会致使内核映像的尺寸发生膨胀。内核开发者可以将实验性的代码打包到模块中&a…...
力扣面试经典算法150题:移除元素
移除元素 今日的题目依旧是力扣面试经典算法150题中数组相关的题目:移除元素 题目链接:https://leetcode.cn/problems/remove-element/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个排序数组 nums 和一个值 val&a…...
java关于前端传布尔值后端接收一直为false问题
前端传值: {"message":"我肚子疼","isChiefComplaint": true }后端接收对象结构体: public class SymptomInquiryDTO {private String message;private boolean isChiefComplaint; }结果后端接收到的值一直是false&…...
工具学习_CVE Binary Tool
1. 工具概述 CVE Binary Tool 是一个免费的开源工具,可帮助您使用国家漏洞数据库(NVD)常见漏洞和暴露(CVE)列表中的数据以及Redhat、开源漏洞数据库(OSV)、Gitlab咨询数据库(GAD&am…...
智观察 | 行业赛道里的AI大模型
“AI改变世界”被炒得热火朝天,结果就换来AI聊天? 实际上,在日常娱乐之下,AI正在暗暗“憋大招”,深入各行各业,发挥更专业的作用。 自动驾驶 最近“萝卜快跑”霸榜热搜长达一周,让无人驾…...
linux 进程 inode 信息获取
根据端口查找 ss -neltup | grep "$port"根据 pid 查找 ss -neltup | grep "pid$pid"根据 inode 查找 ss -neltup | grep "ino:$inode"根据pid查找进程打开的inode ls -al /proc/$pid/fd查看inode信息 cat /proc/$pid/net/tcp | grep $ino…...
计算机网络-网络层
负责在不同的网络之间转发数据包,基于数据包的 IP地址转发,每个数据包可以按照不同路径传输。网络层不负责丢包重传,以及数据包之间数据顺序的的问题。 网络设备 路由器工作在第三层:网络层,能看到网络层的地址&…...
机器学习:识别AI,GraphRAG,LoRA,线性变换,特征
1.AI识别 1.bitgrit 生成式 AI API 文档 生成式 AI 假图像检测 API 可用于以编程方式检测假图像(即由生成式 AI 创建的图像)。2.X Virality Prediction API 旨在预测推文的潜在病毒式传播力。https://bitgrit.net/api/docs/x_virality_prediction 2.Gr…...
阿里云SMS服务C++ SDK编译及调试关键点记录
一. 阿里云SMS服务开通及准备工作 在阿里云官网上完成这部分的工作 1. 申请资质 个人or企业 我这里是用的企业资质 2. 申请签名 企业资质认证成功后,会自动赠送一个用于测试的短信签名 也可以自己再进行申请,需要等待审核。 3. 申请短信模板 企…...
Flutter 正在迁移到 Swift Package Manager ,未来会弃用 CocoaPods 吗?
什么是 Swift Package Manager ?其实 Swift Package Manager (SwiftPM) 出现已经挺长一段时间了,我记得第一次听说 SwiftPM 的时候,应该还是在 2016 年,那时候 Swift 3 刚发布,不过正式出场应该还是在 2018 年的 Apple…...
PDF——分割pdf的10个工具
PDF分割器是一种可用于将PDF文档分割成更小的文档甚至单个页面的工具。分割 PDF 文档的主要原因是为了更容易共享。 但该过程的成功取决于您用于拆分 PDF 的工具。较简单的工具仅提供几个选项,可能并不适合所有类型的文档。我们将在本文中列出的 10 个最佳 PDF 分割…...
深入解析 Nginx 反向代理:配置、优化与故障排除
深入解析 Nginx 反向代理:配置、优化与故障排除 Nginx 是一个高性能的 HTTP 和反向代理服务器,它以其高并发和高可扩展性在业界享有盛誉。反向代理是 Nginx 的重要功能之一,通过反向代理可以实现负载均衡、安全代理、缓存等多种用途。本篇文…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

