重生之我 学习【数据结构之顺序表(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 的重要功能之一,通过反向代理可以实现负载均衡、安全代理、缓存等多种用途。本篇文…...
2026年成都最值得关注的整合营销推广推荐榜单
推荐1 :橙意机构 [整合营销推广服务]橙意机构简介橙意机构致力于打造一条集合多领域的创意产业生态链,以策略与咨询、创意内容创作、全媒体传播、创新技术开发为核心引擎,在互动营销、品牌整合、公关活动、广告策略及设计、影视制作、短视频运…...
如何安装Oracle 12c Cloud Control_OMS服务端组件与Agent部署
OMS安装卡在“Configuring Enterprise Manager Cloud Control”阶段主因是数据库连接失败或SYSAUX表空间不足;Agent状态为“Unknown”多因证书未信任或OMS URL缺失协议/端口;升级失败系OMS更新目录未手动同步补丁;Windows监控SQL Server需启用…...
高性能客服系统技术内幕:通过 SpinWait 自旋等待结构体提升高频消息分发性能舶
1. 智能软件工程的范式转移:从库集成到原生框架演进 在生成式人工智能(Generative AI)从单纯的文本生成向具备自主规划与执行能力的“代理化(Agentic)”系统跨越的过程中,.NET 生态系统正在经历一场自该平台…...
光储微网ODM/OEM标杆实践:爱阳储能的技术深耕与全场景赋能之路
在双碳目标推动下,全球储能产业进入规模化爆发期,分布式储能作为能源结构转型的核心支撑,正迎来前所未有的发展机遇。其中,ODM/OEM模式凭借柔性定制、技术适配、成本优化的核心优势,成为连接储能技术研发与全球市场需求…...
【Charles 抓包工具笔记】(自用复盘版)
📡 Charles 抓包工具笔记(自用复盘版)适用场景:HTTP/HTTPS 抓包分析、接口调试、弱网测试、移动端测试 最后更新:2026-04-09一、Charles 简介 1.1 基本信息 Charles:中文名“青花瓷”,是一款基于…...
OpenClaw学习助手:百川2-13B量化模型自动整理课程笔记
OpenClaw学习助手:百川2-13B量化模型自动整理课程笔记 1. 为什么需要自动化笔记整理 作为一名经常需要消化大量课程资料的技术从业者,我长期被两个问题困扰:一是阅读PDF/PPT时手动摘录效率低下,二是分散的笔记难以形成知识体系。…...
千问3.5-9B+OpenClaw成本对比:自建模型VS商业API
千问3.5-9BOpenClaw成本对比:自建模型VS商业API 1. 为什么需要关注OpenClaw的token消耗 去年冬天,当我第一次用OpenClaw自动整理全年会议纪要时,看着控制台不断刷新的token消耗记录,手指不自觉地敲起了桌子——这个看似简单的任…...
终极Windows风扇控制解决方案:FanControl深度配置与性能优化实战指南
终极Windows风扇控制解决方案:FanControl深度配置与性能优化实战指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitH…...
Phi-4-reasoning-vision-15B作品集:15类真实办公截图(邮件/PPT/数据库/IDE等)理解效果
Phi-4-reasoning-vision-15B作品集:15类真实办公截图理解效果展示 1. 模型能力概览 Phi-4-reasoning-vision-15B是微软最新发布的视觉多模态推理模型,专门针对办公场景的视觉理解需求进行了优化。这个模型不仅能看懂图片内容,还能像专业人士…...
第16章 Mosquitto客户端开发实战
第16章 客户端开发实战 16.1 Python客户端 安装 pip install paho-mqtt基础示例 import paho.mqtt.client as mqttdef on_connect(client, userdata, flags, rc):print(f"Connected: {rc}")client.subscribe("sensor/#")def on_message(client, userdata, …...

