重生之我 学习【数据结构之顺序表(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 的重要功能之一,通过反向代理可以实现负载均衡、安全代理、缓存等多种用途。本篇文…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

