当前位置: 首页 > article >正文

Seqlist 顺序表 的实现c语言

本小结重点 你将学到 函数基础 传值传地址的区别结构体指针 简单循环控制 理解物理结构与存储结构的区别多文件分布简单来说就是对动态数组进行函数封装简化了很多功能所以很多就是对数组的利用但更多是对结构体数组所以学习顺序表要对结构体熟悉其次函数的操作比如定义等要清晰结构体是一种自定义的数据类型所以可以包含各种类型的数据类型是个集合是包含多个数据项的数据元素对指针的操作要清楚不熟悉可以去B站搜比特鹏哥C语言部分讲的很详细的首先要了解一下逻辑结构和存储结构一句话结论逻辑结构 数据怎么“排”关系物理结构 数据怎么“存”内存一个管关系一个管存放。一、逻辑结构你看到的样子逻辑结构就是数据之间是什么关系只有 4 种1. 线性结构一对一例顺序表、链表、栈、队列2. 树形结构一对多例二叉树、B树3. 图形结构多对多例图4. 集合结构无关系逻辑结构 数据的逻辑关系和内存怎么存 完全无关。二、物理结构内存里的样子物理结构就是数据在内存里怎么放只有4种1. 顺序存储连续放例数组、顺序表2. 链式存储不连续靠指针连例链表3. 哈希散列4.索引物理结构 内存布局决定了访问速度、增删快慢。三、最关键的关系你必须懂同一个逻辑结构可以用不同物理结构实现例栈逻辑结构 队列逻辑结构都既可以用 数组 实现顺序栈又可以用 链表 实现链栈逻辑结构是“规则”或者是一种关系物理结构是“实现方式”或者不同的路线。特点1顺序表是基于数组的具有数组的特性包括占用连续的空间手把手教你学会顺序表这里我们用多文件管理代码不熟悉的可见我主页关于多文件的介绍头文件类 比 书的目录 源文件相当于 书页的内容在 seqlist.c文件中完成函数细节的实现在test.c功能的测试开发还有就是Seqlist.h中可以写好需要用到的宏后面会用assert 断言宏 需要头文件如assert.h声明各部分功能的函数还有就是统一写好需要用到的头文件简单说明一下 主要的运算 就是怎么用增 最后面插入就是尾插SLPushBack最常用Push插入Back尾部SLAddTailAdd添加Tail尾SLAppendAppend追加语义贴合尾从最前面插入 简称头插SLPushFront最常用Push插入Front头部SLAddHeadAdd添加Head头SLPrependPrepend前置语义贴合头部添加这些名字都特定的含义还有就是特定位置插入删 头删 尾删 任意位置删除 SLinsert任意取名字 SL 顺序表 Pop删除位置front / back任意SLErase查 查找特定的数据 如QQ号加好友SL Check(核对检验)不就是查找一样吗或者 SLFind改 修改数据 修改昵称备注ID动态顺序表 与 静态顺序表的抉择int arr[666];这是一个666个元素的数组int size;这是一个整形变量表示有效元素的个数这里需要将这两个数据项集合为一个新的数据元素这就最好用结构体类型正好利用结构体类型struct Seqlist{int arr[666];int size;}记住这只是一个类型 定义变量 是类型名 变量名 类型重命名呀 typedeftypedefstruct seqlist SL ;这里起了一个新名字叫SL类型首先定义一个结构体变量 SL sl ;类型 变量名typedef 类型 重命名类型 例如 typedef int nb;平时定义变量 Int a 666; 现在是 nb a 666;这是等价的拆解 自定义关键字 结构体 标签名 重新命的名字初始化结构体struct Point {int x; 这里都是成员列表int y;};struct Point p {.x 10, .y 20};这是C99规定的初始化只有在定义的同时赋值才叫做初始化但是大多数都是 引用赋值 变量名 . 成员名数据项p.x 666,p.y 888;静态顺序表的弊端在一个项目软件在开发过程中使用的用户服务端的数据量是不确定的所以静态顺序表就很鸡肋i那不直接就开辟很多大的空间来存储数据但这样就会有两个问题前期成本高浪费太多空间后期用户爆单不就炸了又不可以修改原本的空间大小 so 我们最好使用动态顺序表增加了动态扩容的属性 可以根据需求来动态开辟空间避免资源空间浪费健壮性更好所以必须要会哦就是利用realloc动态增容typedef struct Seqlist {int * arr; 指向数组顺序表起始地址的指针(数组类型和起始地址) 后面两个成员表示该数组的特点int size;已使用的元素个数有效元素个数总capacity;int capacity;总容量 单位元素 个数}SL;取别名 叫SL类型或者是 另起一行重命名 直接typedef sturct Seqlist SL启发以及预警 上面我标出数组类型表达如果写死了就很难改这时便可以用到宏定义 #define SLtype int没有分号宏定义就是一种替换 将所有的SLtype替换为Int同理可得 #define n 666 常见用于变长数组typedef struct Seqlist {SLtype * arr; 只要改变宏定义就可以改变下面这个数组的类型就可以用于突然要用这里存储其他类型的数据int size;int capacity;}SL;取别名 叫SL类型继续修房子 ——-砖块函数方法分装 高内聚低耦合 简化理解就是功能单一化 不要又太多纠缠比如写个加法函数 就不要打印那个值仅仅只去打印本节需要的头文件 创建 SL.h 里面主要就是这些的头文件还有就是函数的声明还有宏定义从最简单的初始化开始 这个功能我们写个函数吧返回值接下来就是在SL.c中完善对函数的定义刚只是声明了注意 下面第二行细节要包含头文件 SL.h 这样才能使用已经定义了的结构体还有不用重复写头文件 上面图片中 第一行是 为了解决在VS上的输入报错因为安全性考虑也为了可移植 下面的函数就是初始化的操作吗YES记住任何能写出函数的都可以分开写在main函数里只是函数最为C语言最基础的组成部分罢了SL sl {.arrNULL, .size0, .capacity0};这一行 等价于 传递地址指针后赋初值改变原值都实现了初始化但是不推荐函数可以反复调用不用重复写代码不要每次初始化都写一遍只要调用写过的函数 功能单一越好 不是不行只是效率不高白费人工SO例如stdio.h等库函数吗都是写好的一个个功能或者方法可以这样理解方便直接用不然每次都要写输入输出的函数 1 我们不会写 scanf printf 的函数原理而且只要会用就好 2没必要每次花时间去写就统一规定用统一的标准来写输入输出 3第三每个人写的函数命名呀等等都不一样再协同合作和工程建设时 很难合作 所以后面 写的每个那个 功能都用函数来写 比如 增删查改比如第一要理解函数参数为什么是结构体指针变量值做参数传递只是对实际参数的一份临时拷贝 并不会改变原来的现状 理解为给你拍了个照片在上面乱涂乱画实际对你来说并没有影响地址做参数传递传递的是地址是指向内存空间的地址任何变量的创建都需要开辟空间的在相应的空间存储数据 传递地址就是 对实体 实参进行操作 就像你被七匹狼鞭打是一样打的是你的本体肯定会痛的第二 地址引用操作符 - 就时 解引用 地址指针 针对结构体指针变量 在函数传递参数.操作符也是引用操作符 适用于 结构体变量大白话语法结构体指针变量名 - 成员变量名 再赋值 重要理解所有的增删都需要对size进行改变size 原来是有效的元素个数 作为下标就是最后一个数的后一个数 不懂就画图 此时有效个数为4作为下标的话是从0开始的所以arr[size] 永远是数组最后一个数据的后一个有图又真相无论头插 还是尾插都需要将size因为都加入了一个新元素需要腾出一个新位置呀这里继续画图 采取古法画图手搓 这里是尾插size由3变成4敲黑板解释一下就是 无论在哪里插入一个数据都增加了有效个数size要自增1可以写size;或者size; 而且不要疑惑无论是前置或者是后置只要没有赋值或者参与表达式的运算结果都是1的效果同理可得 各种删除操作都是需要--size 有效个数减一---------------------------------------------------------------------------------------------------------------------------------总结顺序表的初始化 多文件处理 函数传值 结构体宏定义 还有什么 你来回忆 欲知后事如何且听下回分解增 删 查 改 的 cyu实现

相关文章:

Seqlist 顺序表 的实现c语言

本小结重点: 你将学到 函数基础 传值传地址的区别结构体指针 简单循环控制 理解物理结构与存储结构的区别多文件分布 简单来说就是对动态数组进行函数封装,简化了很多功能所以很多就是对数组的利用,但更多是对结构体数组,所…...

Phi-4-mini-reasoning案例分享:用逻辑题测试模型对‘必要条件’的理解深度

Phi-4-mini-reasoning案例分享:用逻辑题测试模型对必要条件的理解深度 1. 模型能力定位 Phi-4-mini-reasoning是专为推理任务优化的文本生成模型,其核心优势在于处理需要多步逻辑推导的问题。与通用对话模型不同,它更擅长处理以下类型任务&…...

Super IO:提升Blender批量处理效率的自动化流程解决方案

Super IO:提升Blender批量处理效率的自动化流程解决方案 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io 在3D设计工作流中,设计师常常面临文件格式转换繁琐、跨…...

Ray Optics:面向未来的光学仿真平台——从零开始的光学建模实践

Ray Optics:面向未来的光学仿真平台——从零开始的光学建模实践 【免费下载链接】ray-optics A web app for creating and simulating 2D geometric optical scenes, with a gallery of (interactive) demos. 项目地址: https://gitcode.com/gh_mirrors/ra/ray-op…...

ZGC停顿时间为何突然飙升?3个被90%团队忽略的配置雷区曝光

第一章:ZGC停顿时间为何突然飙升?3个被90%团队忽略的配置雷区曝光 ZGC(Z Garbage Collector)以亚毫秒级停顿著称,但生产环境中频繁出现 10–50ms 甚至更高停顿,往往并非内存压力所致,而是源于几…...

【数据结构】树的定义、核心术语与关键性质全解析

在数据结构的世界里,树(Tree) 是一种极其重要的非线性结构,它完美模拟了自然界中树的层次关系,从文件系统、组织结构,到算法中的二叉搜索树、堆,再到 AI 中的决策树,树的身影无处不在…...

超级障碍马术联赛(PJL)正式启动,设立创纪录的3亿美元保底奖金池,开启障碍马术运动新纪元

• PJL助力骑手以全职职业运动员身份参赛,同时为这项运动构建可持续的经济模式。 • PJL由McCourt Global支持,核心管理团队拥有数十年马术赛事、体育和娱乐行业经验,为顶级障碍马术赛事树立全新、可持续且具备全球影响力的标准。 • 2027年3…...

软件实施交付转运维学习第三天:Linux系统命令基础(部分)

从实施到运维的蜕变之路,掌握命令就是掌握Linux的灵魂写在前面作为一名从软件实施交付转向运维的工程师,我深刻体会到:Linux命令不仅仅是简单的指令,更是与操作系统对话的语言。当我们站在实施和运维的交界处,掌握Linu…...

告别手动操作!Open-AutoGLM部署教程,让AI接管你的手机

告别手动操作!Open-AutoGLM部署教程,让AI接管你的手机 1. 引言:AI手机助手的革命性突破 想象一下这样的场景:早上醒来,你只需要对手机说"帮我点一杯星巴克燕麦拿铁,加双份浓缩,送到公司&…...

中兴光猫配置解密工具:突破运营商限制,掌握家庭网络自主权

中兴光猫配置解密工具:突破运营商限制,掌握家庭网络自主权 【免费下载链接】ZET-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/ze/ZET-Optical-Network-Terminal-Decoder 在家庭网络管理中,你是否曾因…...

Axelspace 太空公司牵头联合体入选日本太空战略基金项目 “提升下一代地球观测卫星能力技术”

—— 通过卫星星座与航空器开展特定排放源二氧化碳排放与吸收监测,打造气候解决方案,开拓全新市场机遇 Axelspace 太空公司、明星电气株式会社、全日空控股株式会社及 JIJ 株式会社联合宣布,各方共同申报的技术研发项目成功入选日本宇宙航空…...

【linux】linux权限的详细讲解

一、Linux 权限的概念 1.1、用户分类 Linux下有两种用户:超级用户 (root) 与 普通用户超级用户:可以再linux系统下做任何事情,几乎不受权限的限制; 普通用户:在linux下做权限范围内的事情; 超级用户的命令提…...

【AI编程工具系列:第13篇】华为CodeArts与豆包MarsCode实战:企业级AI编程工具深度对比

摘要 本文全面对比分析华为CodeArts和豆包MarsCode两款企业级AI编程工具。华为CodeArts凭借三层融合架构(AI原生IDE集成层、代码智能体引擎层、Codebase语义索引系统层),在安全合规、信创兼容和私有化部署方面表现卓越,代码补全延…...

【读书笔记】《如何做到爱孩子也被孩子爱》

《如何做到爱孩子也被孩子爱》作者:法国著名心理学家(著有《你好,焦虑分子》)核心框架:爱、理性与逻辑 本书提出教养孩子的三大抓手,缺一不可: 爱 → 带来丰富情感与能量,让孩子将来…...

【读书笔记】《在远远的背后带领》

《在远远的背后带领》书话整理书名由来 "在远远的背后带领"这个书名,源于作者对十余年养育实践的回顾与思考。她发现,父母养育孩子容易走两个极端: 过度控制:强迫孩子按照自己的想法行事,结果双方俱疲&#…...

windows版vasp-6.5.1非Cygwin版

推荐使用oneapi版本,这个版本性能要好一点。 1.解压压缩包。 Gromacs&Vasp软.件.交.流:962946828 2.用VASP安装器添加系统环境变量(选择bin目录所在目录的父级目录)。 3.测试命令(在cmd或者powershell执行&#…...

Graphormer开源模型部署教程:3.7GB小模型+RTX4090一键启动分子建模服务

Graphormer开源模型部署教程:3.7GB小模型RTX4090一键启动分子建模服务 1. 项目介绍 Graphormer是一种基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。这个3.7GB的小模型在OG…...

2026年Java面试最常被问的1000道题目及参考答案

Java学到什么程度可以面试工作? 要达到能够面试Java开发工作的水平,需要掌握以下几个方面的知识和技能: 1. 基础扎实:熟悉Java语法、面向对象编程概念、异常处理、I/O流等基础知识。这是所有Java开发者必备的基础,也…...

【人生底稿 03】2012 末日传说与我踏入 IT 的起点

接上《人生底稿》系列,本篇记录一段真实的成长碎片,不严格按时间线更新,只为记下一个农村少年,一步步走向社会的真实轨迹。 在参加某科技公司 ITMS 培训之前,我先经历了一轮面试 —— 上机题 技术面,分数…...

YOLOv8人脸检测实战:如何将WIDER Face数据集玩出新花样?结合OpenCV分类提升准确率

YOLOv8人脸检测实战:WIDER Face数据集与OpenCV分类的融合优化 人脸检测技术早已从实验室走向实际应用,但误检问题始终困扰着开发者。上周团队在商场部署的人脸统计系统,竟将广告牌上的明星照片全部计入客流——这种尴尬促使我们重新思考单阶段…...

BVH构建优化:四种分割算法在光线追踪中的性能对比

1. BVH分割算法基础概念 当你在玩3D游戏时,有没有想过为什么场景中的物体能够如此快速地渲染出来?这背后就离不开BVH(边界体积层次结构)技术的支持。简单来说,BVH就像是一个高效的"物体分类系统"&#xff0c…...

Git开源贡献全指南:从入门到精通

开源项目Git贡献全流程拆解 理解开源项目贡献的基本概念 开源项目的定义与意义Git在开源协作中的核心作用常见的开源贡献类型(代码、文档、测试等) 准备开发环境 安装Git并完成基础配置(用户名、邮箱、SSH密钥)注册GitHub/GitLab等…...

Docker 容器技术 第一节---定义、概念、安装CentOS 7 Linux系统、MobaXterm中安装docker-ce

一、Docker的定义Docker是一款开源的容器化平台,它能将应用及其依赖的环境、配置、库等打包成轻量可移植的容器,既保证了不同环境下应用运行的一致性,又以共享宿主机内核的方式实现了比传统虚拟机更高效的资源利用和秒级启动速度,…...

从特效 SDK 到 AI 动效平台:Neon Vibe Motion 的技术演进之路

多媒体中台在 B 站主要负责剪辑、拍摄、直播等业务场景的动效渲染,开发维护的 SDK 在后文统一称为特效 SDK。 传统的视频特效生产一般分三条链路: 三条链路存在一个困境:效果丰富度、实时可交互、生产效率,三者不可兼得。 那么能…...

华为交换机等保2.0实战:手把手配置身份鉴别,从密码策略到登录超时

华为交换机等保2.0身份鉴别全流程配置指南 当企业网络面临等保2.0合规检查时,身份鉴别环节往往是整改重点。作为网络安全工程师,我曾协助多家企业通过等保测评,发现华为交换机的身份鉴别配置存在不少易忽略的细节。本文将分享一套经过实战验证…...

Vue 中的 deep、v-deep 和 >>> 有什么区别?什么时候该用

点赞 收藏 学会🤣🤣🤣 “你用 Element Plus 写了个按钮,想改下 hover 颜色,结果死活不生效!最后查了半天,发现得加个 :deep() 才行” 其实,这是 Vue 中一个非常常见的坑&#xf…...

论文详解 | 基于轨迹数据的多层空间交互网络动态社区发现与时序分析

论文详解 | 基于轨迹数据的多层空间交互网络动态社区发现与时序分析 一、论文基础信息与核心概述 1.1 论文基础信息 项目 详情 论文标题 Dynamical community detection and spatiotemporal analysis in multilayer spatial interaction networks using trajectory data 1.2 …...

OpenClaw人人养虾:配置Anthropic (Claude)

Anthropic 是 Claude 系列模型的开发者。Claude 以出色的指令遵循能力、深度推理和长文本处理著称。OpenClaw 支持通过 API Key 或 Claude Code CLI OAuth 接入。 认证方式 方式一:API Key(推荐) 前往 Anthropic Console 创建 API Key在 O…...

从服务暴露到语义裁剪:全面理解 SAP ABAP CDS projection view 的设计价值与实战用法

在很多 ABAP 开发者的直觉里,CDS view entity 已经足够强大:既能定义数据模型,也能承载丰富的语义注解,还能为 RAP、OData、分析场景提供统一的数据基础。可一旦进入真正的业务服务设计阶段,你很快就会发现,底层模型的完整能力,并不等于某个具体服务应该暴露给外部的能力…...

SpringBoot + MongoDB 5分钟快速集成:从0到1实操指南

目录 MongoDB‌ 快速集成 常用API MongoDB‌ MongoDB‌ 是一个基于分布式文件存储的‌文档型数据库‌,属于 NoSQL 数据库中最接近关系型数据库的产品,旨在为 Web 应用提供高性能、高可用和可扩展的数据存储解决方案 。 MongoDB以灵活的无模式文档模型…...