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

数据结构初涉----顺序表

有了我们之前共同学习的C做基础我们本文开始学习数据结构本文先从数据结构的基础-----顺序表开始介绍。顺序表的出现顺序表的基层原理其实就是数组但是数组用来存放数据可以遇到插入数据删除数据这些操作时我们得先计算此时数组中的元素个数再进行一系列的操作此过程比较麻烦数组就不够用了所以出现了顺序表这个概念在数组的基础上增加了一些增删查改的操作方法摇身一变成了顺序表。顺序表的物理与逻辑结构说到顺序表就不得不提线性表这个概念线性表是具有相同特性的数据结构的集合它的逻辑结构一定连续但是物理结构不一定连续由于顺序表的底层原理是数组所以说它的物理结构和逻辑结构都是连续的。顺序表的分类顺序表分为静态顺序表和动态顺序表两大类。静态顺序表动态顺序表从顺序表的结构中不难看出静态的顺序表是使用定长数组动态顺序表中是使用指针动态分配空间我们一般都会使用动态顺序表不仅空间是动态分配参数也是有利于顺序表的各种操作函数实现。在使用顺序表时我们不仅会在表中放入 int 型数据也会放入其他类型例如 charfloat 等等所以为了代码提高利用率我们使用 typedef 关键字来替换数据类型。顺序表的各种增删查改操作都是由函数来实现的我们实现出该功能的代码后将其封装为一个函数方便日后使用。顺序表的增删查改函数实现顺序表的初始化将结构体的各部分分别进行初始化...顺序表的销毁顺序表的插入在顺序表中插入数据时我们可以选择在顺序表的表头插入表尾以及选择一个随机位置插入根据需求来选择插入的位置那么根据以上这些情况思路如下1.插入空间是否被占用首先在插入数据之前我们要先将要插入的数据空间提前留出以方便结构体指针直接插入新数据那么在尾插中不存在这个问题直接将数据插入至顺序表尾部即可那么在头插和指定位置插入时我们要通过循环来将数据逐个移位此时需要注意数据是从后向前逐个移动不能够覆盖原本数据。2.指针指向空间是否充足能够容纳新插入数据若空间不充足时进行数据插入会导致程序数据会导致数据写入失败或者丢失所以在插入新数据之前我们要判断此时空间是否仍然充足不够时要进行空间扩容realloc--- 动态内存函数中介绍。3.在确定空间要进行扩容时一次增大多少才不会过于浪费空间若每次增容过小时每次有可能会重新开辟空间使得程序效率低下若每次增容过大时用不完但是一直在占用会一定程度上浪费空间那么增容一般是成倍的增加一般是2倍增加使得空间复杂度最低。4.在扩容时使用 realloc 函数需要注意些什么在介绍动态内存函数时我们介绍到主要有三点扩容时返回一个指向起始地址的指针那么此时的空间有可能会申请失败此时返回一个空指针为了防止将原本空间地址同时搞丢时我们要拿一个新指针来接收判断其并非是空指针标志着空间申请成功时将指针赋值使用。动态申请的空间在使用完之后必须要进行内存释放free函数。将空间释放之后此时指向该空间起始地址的指针变为空指针为了防止有野指针的出现要将指针及时置空。顺序表的头插顺序表的尾插当开始顺序表的尾插时你会发现只要是插入不论是在哪一个位置插入都需要判断空间是否充足代码会出现冗余现象所以我们将判断空间是否充足的功能封装为一个函数。顺序表的指定位置插入顺序表的删除顺序表的头删直接覆盖就删除记得 ps-size 更新顺序表的尾删顺序表的指定位置删除顺序表的打印打印顺序表的内容时只需要传值打印需要修改指针指向的内容时才需要传址调用。顺序表的查找查找元素成功则返回元素所在下标失败则返回-1。以上就是顺序表中所需要函数功能的封装源码实现以下为测试这些函数的功能以上为数据结构入门---顺序表的函数封装下篇即实现利用顺序表应用---通讯录项目。创作不易喜欢揪一键三连有问题欢迎评论区留言共同学习一起进步

相关文章:

数据结构初涉----顺序表

有了我们之前共同学习的C做基础,我们本文开始学习数据结构,本文先从数据结构的基础-----顺序表开始介绍。顺序表的出现顺序表的基层原理其实就是数组,但是数组用来存放数据可以,遇到插入数据,删除数据这些操作时&#…...

PatchTST论文精读与复现:手把手带你理解‘时间序列的64个词’

PatchTST论文精读与复现:手把手带你理解"时间序列的64个词" 当Transformer架构在NLP和CV领域大放异彩时,时间序列预测领域却长期被传统统计方法和浅层神经网络主导。直到2023年PatchTST的出现,才真正打破了这一僵局。这篇来自顶级学…...

JS逆向之某招标采购平台接口aesKey、epcos以及响应content解密

文章目录 声明 一、起因与目标 二、第一步:先证明它不是普通接口 三、第二步:观察页面结构,判断从哪里下手 四、第三步:优先打请求拦截器,不要先钻业务页 1. GET 请求加密逻辑 2. POST 请求加密逻辑 五、第四步:把真正的加密函数剥出来 1. 请求加密函数 2. 响应解密函数 …...

【进程间通信】————匿名管道、模拟实现进程池

目录 1. 进程间通信 1.1 进程间通信的目的 1.2 进程间通信分类 2. 管道 3. 匿名管道 3.1 pipe函数 3.2 用 fork 来共享管道原理 3.3 从文件描述符角度理解 3.4 从内核角度理解 3.5 父子进程管道读写测试 3.6 管道特性 3.7 4种通信情况 3.8 管道的原子性 4. 进程…...

云服务器配置远程桌面

租赁云服务器通常没有图形化界面,因为想跑仿真看场景所以希望通过远程桌面的方式链接过去,那就需要服务器有图形化界面 1.安装图形化界面 ssh建立连接后 sudo apt update 极简版 sudo apt install --no-install-recommends task-gnome-desktop 简化…...

C++:模板精讲

泛型编程 当我们实现一个交换函数&#xff0c;想要实现不同类型的交换&#xff0c;可以使用函数重载&#xff1a; #include<iostream>using namespace std;void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(char& …...

015-016 类中方法中的this,解决类中this指向问题

类中方法中的this<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…...

Weka回归分析实战:从数据预处理到模型部署

1. 项目概述&#xff1a;Weka中的回归机器学习实战指南在数据科学领域&#xff0c;回归分析是预测连续型变量的经典方法。Weka作为一款开源的机器学习工作台&#xff0c;以其友好的图形界面和丰富的算法库&#xff0c;成为许多从业者快速验证模型的首选工具。不同于Python/R需要…...

边缘节点的PHP应用部署、数据同步、算力调度标准化方案=hyperf最

针对边缘节点场景&#xff0c;按三个维度给你整理最实用的 Hyperf 方案&#xff1a;---一、应用部署标准化 容器化 & 打包 …...

ARM智能卡接口(SCI)架构与通信协议详解

1. ARM智能卡接口(SCI)核心架构解析 智能卡接口(Smart Card Interface, SCI)作为嵌入式系统中实现安全通信的关键模块&#xff0c;其硬件架构设计直接决定了系统与智能卡之间的通信效率和可靠性。ARM架构下的SCI模块采用分层设计理念&#xff0c;主要由物理层、协议层和应用层组…...

别再手动算了!用Matlab的dec2hex/dec2bin函数搞定进制转换(附硬件寄存器操作实例)

别再手动算了&#xff01;用Matlab的dec2hex/dec2bin函数搞定进制转换&#xff08;附硬件寄存器操作实例&#xff09; 在嵌入式开发和数字电路设计中&#xff0c;进制转换是工程师们每天都要面对的"家常便饭"。想象一下这样的场景&#xff1a;你正在调试一块FPGA板卡…...

evolver部署教程:构建自动优化AI系统

在运行进化算法或自动优化类 AI 系统时&#xff0c;计算资源与运行稳定性会直接影响结果质量。尤其是在需要长时间迭代、批量实验或多轮计算的场景中&#xff0c;一些具备稳定资源与弹性能力的环境&#xff08;如莱卡云服务器这类部署方式&#xff09;通常更有利于实验持续推进…...

扩展拖垮VSCode?禁用这3类高危插件,启动速度提升3.2倍,实测有效

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;扩展拖垮VSCode&#xff1f;禁用这3类高危插件&#xff0c;启动速度提升3.2倍&#xff0c;实测有效 VSCode 启动缓慢常被误认为是硬件或系统问题&#xff0c;但真实瓶颈往往藏在插件生态中。我们对 127…...

如果openKylin 2.0 SP2主机的IPv4地址改变,如何让GitLab正常运行

作者&#xff1a;沈传越 明德融创工作室&#xff08;Minter Fusion Studio, MFS&#xff09; 出品 本文介绍的所有步骤均经过测试复现。 本文针对GitLab管理员使用。如果对于相关的专业词汇不太清楚。可以参考以下文章&#xff1a; 《如何在openKylin下安装并配置GitLab&…...

VSCode量子插件配置踩坑实录:92%开发者忽略的3项核心环境校验与自动修复方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode量子插件配置踩坑实录&#xff1a;92%开发者忽略的3项核心环境校验与自动修复方案 VSCode 量子开发插件&#xff08;如 Q# Extension、Quantum Development Kit&#xff09;在启用时频繁报错&…...

DimOS:AI原生机器人操作系统入门与实践指南

1. 项目概述&#xff1a;重新定义机器人操作系统如果你在过去几年里折腾过机器人开发&#xff0c;大概率绕不开ROS&#xff08;Robot Operating System&#xff09;。从ROS 1到ROS 2&#xff0c;它确实为机器人软件模块化、通信标准化立下了汗马功劳。但说实话&#xff0c;有多…...

告别STC-ISP!手把手教你写一个通吃STC89/12/15系列单片机的延时函数库

告别STC-ISP&#xff01;手把手教你打造跨代STC51单片机的延时函数库 当你在深夜调试STC89C52RC时&#xff0c;突然接到需求要移植代码到STC15W4K32S4上&#xff0c;却发现原本精准的延时函数完全失效——这种场景对51单片机开发者来说再熟悉不过。不同指令集架构带来的时钟周期…...

量子模拟中的N-可表示性问题与相关纯化方法

1. 量子模拟中的N-可表示性问题在量子化学计算中&#xff0c;约化密度矩阵&#xff08;Reduced Density Matrix, RDM&#xff09;是描述多电子系统量子态的核心工具。特别是二电子约化密度矩阵&#xff08;2-RDM&#xff09;&#xff0c;它包含了计算系统能量和各类物理性质所需…...

未来3年,这3个AI赛道已经定了

我最近一直在想一件事。Anthropic上个月的年化收入超过了OpenAI。很多人看到这条新闻&#xff0c;觉得不过是个财报数字。但我觉得这是一个信号——一个新产业正式成型的信号。这个产业叫AI编程。先说为什么是Anthropic&#xff0c;不是OpenAIOpenAI体量更大&#xff0c;名气更…...

3个颠覆性功能让Pearcleaner成为Mac系统清理必备神器

3个颠覆性功能让Pearcleaner成为Mac系统清理必备神器 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否想过&#xff0c;为什么Mac电脑用久了会越来越慢…...

Linux服务器磁盘爆满?手把手教你用parted命令在线扩容/home分区(CentOS 8/9实战)

Linux服务器磁盘爆满&#xff1f;手把手教你用parted命令在线扩容/home分区&#xff08;CentOS 8/9实战&#xff09; 凌晨三点&#xff0c;监控系统突然发出刺耳的警报声——生产环境的/home分区使用率突破95%。作为运维工程师&#xff0c;这种场景再熟悉不过&#xff1a;应用日…...

差分放大器在高速信号链中的关键作用与设计实践

1. 差分放大器在高速信号链中的核心作用在现代无线通信和高速数据采集系统中&#xff0c;差分放大器扮演着信号调理的关键角色。这类器件通过独特的平衡架构&#xff0c;能够有效抑制共模噪声并显著降低偶次谐波失真。以THS4509为例&#xff0c;其1900MHz的带宽和6600V/s的压摆…...

NREL风速数据API参数详解:从wkt坐标到interval间隔,新手避坑指南

NREL风速数据API参数详解&#xff1a;从wkt坐标到interval间隔&#xff0c;新手避坑指南 当你在可再生能源或气象研究领域初次接触NREL风速数据API时&#xff0c;是否曾被那一长串参数列表搞得晕头转向&#xff1f;本文将化身你的私人参数解码器&#xff0c;带你深入理解每个配…...

神经形态硬件在强化学习机器人控制中的低功耗实践

1. 项目概述&#xff1a;神经形态硬件上的强化学习机器人控制去年在实验室调试Astrobee机器人时&#xff0c;我遇到了一个棘手的问题&#xff1a;传统GPU方案虽然能实现精确控制&#xff0c;但功耗高达200W&#xff0c;根本无法满足太空任务对能源的苛刻要求。这促使我开始探索…...

Pytest及相关测试工具实战指南

一个完整的例子&#xff0c;手把手教你从零开始使用Pytest&#xff0c;Pytest-cov&#xff0c;Pylint&#xff0c;flake8。 例子&#xff1a;银行账户系统 编写测试 -> 检查覆盖率 -> 做静态分析 -> 代码风格检查 第一部分&#xff1a;Pytest入门 - 从零到熟…...

PyTorch实现Transformer英法机器翻译系统

1. 从零构建Transformer模型&#xff1a;实现英法机器翻译系统 2017年&#xff0c;Transformer架构的提出彻底改变了序列到序列任务的处理方式。作为一名长期从事NLP开发的工程师&#xff0c;我将带您完整实现一个基于PyTorch的英法翻译Transformer模型。不同于简单调用现成库&…...

从零实现5大机器学习基础算法:Python代码与数学推导

1. 从零实现机器学习基础算法的必要性在机器学习领域&#xff0c;调用现成的库&#xff08;如scikit-learn&#xff09;固然方便&#xff0c;但真正理解算法本质的开发者都会选择自己动手实现一遍。这就像学习烹饪时&#xff0c;从切菜开始准备食材比直接使用预制菜更能掌握料理…...

从‘像素’到‘3D模型’:手把手拆解David Marr视觉四层描述,理解CV任务本质

从像素到三维世界&#xff1a;用David Marr视觉理论重构计算机视觉认知框架 1982年出版的《视觉计算理论》中&#xff0c;David Marr提出的视觉处理层次模型&#xff0c;至今仍是理解计算机视觉任务本质的黄金标准。这位将神经科学、心理学与计算机科学交叉融合的天才学者&…...

数字孪生AI赋能智慧社区:从概念到落地的全景指南

数字孪生AI赋能智慧社区&#xff1a;从概念到落地的全景指南 引言 在数字化转型浪潮下&#xff0c;智慧社区正从简单的设备联网迈向虚实融合的智能新阶段。数字孪生&#xff08;Digital Twin&#xff09;与人工智能&#xff08;AI&#xff09;的结合&#xff0c;为社区治理、…...

AI Agent Harness日志体系:可追溯性设计

AI Agent Harness日志体系全解密:从零搭建全链路可追溯能力,让每一次Agent决策都有迹可循 关键词 AI Agent、Harness日志体系、可追溯性、全链路追踪、分布式日志、决策审计、故障根因分析 摘要 随着AI Agent从单场景原型落地到企业级多Agent协作生产系统,「决策黑盒」「…...