【数据结构】动态顺序表详解
目录
1.顺序表的概念及结构
2.动态顺序表的实现
2.1创建新项目
2.2动态顺序表的创建
2.3接口的实现及测其功能
2.3.1初始化
2.3.2尾插
2.3.3头插
2.3.4尾删&头删
2.3.5打印&从任意位置插入
2.3.6删除任意位置的数据
2.3.7查找
2.3.8销毁顺序表
3.结语
Hello everybody!今天打算跟大家聊聊动态顺序表。顺序表是最基础的数据结构,也是最实用的数据结构。在今后学习栈和队列时,会基于顺序表去实现它们。动态顺序表顾名思义,就是容量可变的顺序表。我们可以随意在该顺序表中插入数值,并且会自动扩容,十分具有实际应用的价值。那废话不多说,让我们开始叭!

1.顺序表的概念及结构
顺序表是用一段物理地址连续的存储单元一次存储数据元素的线性结构,一般情况下采用数值存储。在数值上完成数据的增删查改。
顺序表一般可以分为:
1.静态顺序表:使用定长数组存储元素

2.动态顺序表:使用动态开辟的数组存储

由于静态顺序表实用价值极低,实现思路上不如动态顺序表,且会实现动态顺序表的话实现静态顺序表也没有太大的问题。因此在这里只给大家详细讲解一下动态顺序表的实现!
2.动态顺序表的实现
2.1创建新项目
进入数据结构,我们要写的代码量会有十分明显的增加。例如今天的动态顺序表,代码量将会轻轻松松突破100行。所以我建议创建三个文件。这样便于理清代码逻辑以及后期代码的维护。我在上一篇文章和上上篇文章中有更详细的介绍,如果有疑问可以参考栈详解或队列详解。


2.2动态顺序表的创建

首先我们要把需要用到的头文件包含进来,下面的结构体就是咱们的顺序表。其中各个变量的作用我已经注释出来。结构体的下面是顺序表的各种接口。
2.3接口的实现及测其功能
2.3.1初始化

首先我们来解释一下为什么要传结构体指针而不是结构体:要知道,函数传参是对实际参数的拷贝。如果传结构体的话,在函数体内部的一切操作都不会对函数外部的结构体有任何改变,所以我们需要传指针。
这里将顺序表的各个变量给一个起始值就算是完成初始化了。
2.3.2尾插

这两个接口实现完成后我们来看看它们的功能如何:

在测试功能中,我们首先初始化,然后依次尾插了1,2,3,4,5,五个数据。该动态顺序表应该会扩容两次,因此容积是8,有效数据有5个,size为5。测试结果符合预期,这两个接口功能正常。
2.3.3头插
由于头插依然会涉及到顺序表容量不够用从而自动扩容的情况,那么这个接口会有相当一部分代码和尾插一模一样。考虑到代码的简洁性,我们把自动扩容功能单独拎出来形成一个函数:

有了这个函数,头插和尾插直接调用它就ok了!

在头插中,我们需要移动数据。在while循环中把所有的数据向后移动一位,再把要插入的数据把顺序表中的第一个数据覆盖掉。移动数据的时间复杂度是O(n),效率不高。由此可见顺序表并不适合头插。同样的,也不适合头删。

测试功能正常。
2.3.4尾删&头删

尾删和头删的逻辑就比较简单了。但是要特别说明一下,尾删和头删并不是正在意义上的和数据删除了,对于尾删,只需把size减小一个就可以了,以后插入数据的话自然会把原数据覆盖掉。头删就是用后面的数据向前覆盖,也是同样的道理。
2.3.5打印&从任意位置插入

如果上面的接口搞懂了的话,这两个接口就没什么难度啦!
2.3.6删除任意位置的数据


2.3.7查找


2.3.8销毁顺序表


3.结语
好啦,关于动态顺序表的讨论就到这里喽。看完这篇文章依然没有搞懂的宝子可以把自己的疑惑发在评论区呦!
顺序表是数据结构的基础,大家一定要熟悉它!
相关文章:
【数据结构】动态顺序表详解
目录 1.顺序表的概念及结构 2.动态顺序表的实现 2.1创建新项目 2.2动态顺序表的创建 2.3接口的实现及测其功能 2.3.1初始化 2.3.2尾插 2.3.3头插 2.3.4尾删&头删 2.3.5打印&从任意位置插入 2.3.6删除任意位置的数据 2.3.7查找 2.3.8销毁顺序表 3.结语 He…...
Nginx代理https请求的操作过程
理论很简单,过程很曲折,版本适配的问题要小心。 场景: 要和前端进行联调,我本地后端用了https,证书是自制的,主要是页面里面有一些oauth2认证的地方,需要跳转。 比如https://aaa.com/profile.h…...
Linux 面试题(一)
目录 1、绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 2、怎么查看当前进程?怎么执行退出?怎么查看当前路径? 3、怎么清屏?怎么退出当前命…...
HIVE SQL取整函数汇总
目录 int()round(double a)round(double a,int d)floor()ceil() int() 向零取整,即向接近零的方向取整。 int(5.6)输出:5 int(-5.6)输出:-5 round(double a) 四舍五入取整 select round(5.6)输出:6 select round(-5.6)输出&…...
VMware 虚拟机设置静态IP
1.桥接模式:无线网卡虚拟机可以桥接的,Vmware0是虚拟机默认进入的虚拟网络,打开虚拟网络编辑器把Vmware0桥接到具体的无线网卡上,再打开网卡设置选择桥接模式即可。 2、.NAT模式下 :window下VMnet8: IPv4 地址 . . . …...
pandas 如何获取dataframe的行的数量
pandas的dataframe提供了多种方法获取其中数据的行的数量,本偏文章就是介绍几种获取dataframe行和列出量的方法。 为了能够详细说明如何通过代码获取dataframe的行数和列数,需要先创建一个dataframe如下: import pandas as pdtechnologies …...
css实现图片绕中心旋转,鼠标悬浮按钮炫酷展示
vue模板中代码 <div class"contentBox clearfix home"><div class"circle"><img class"in-circle" src"../../assets/img/in-circle.png" alt""><img class"out-circle" src"../../as…...
C++11的线程
线程的创建 用std::thread创建线程非常简单,只需要提供线程函数或者线程对象即可,并可以同时指定线程函数的参数。下面是创建线程的示例: #include <thread> #include <iostream> using namespace std;void func() {cout <<…...
Deepmind开发音频模型Lyria 用于生成高品质音乐;创建亚马逊新产品评论摘要
🦉 AI新闻 🚀 Deepmind开发音频模型Lyria 用于生成高品质音乐 摘要:Deepmind推出名为Lyria的音频模型,可生成带有乐器和人声的高品质音乐。Lyria模型针对音乐生成的挑战,解决了音乐信息密度高、音乐序列中的连续性维…...
Liunx系统使用超详细(一)
目录 一、Liunx系统的认识 二、Liunx和Windows区别 三、Liunx命令提示符介绍 四、Liunx目录结构 一、Liunx系统的认识 Linux系统是一种开源的、类Unix操作系统内核的实现,它基于Unix的设计原理和思想,并在全球范围内广泛应用。以下是对Linux系统的详…...
C语言标准
1、概述 C语言标准是由ANSI(美国国家标准协会)和ISO(国际标准化组织)共同制定的一种语言规范。标准经历过如下更新: C89/C90标准C99标准C11标准C17标准 2、C89/C90标准 (1)这是1989年正式发布的C语言标准࿰…...
TI 毫米波雷达开发系列之mmWave Studio 和 Visuiallizer 的异同点雷达影响因素分析
TI 毫米波雷达开发之mmWave Studio 和 Visuiallizer 的异同点 引入整个雷达系统研究的目标分析影响这个目标的因素硬件影响因素 —— 雷达系统的硬件结构(主要是雷达收发机)AWR1642芯片硬件系统组成MSS 和 DSS 概述MSS 和 DSS 分工BSS的分工AWR1642 组成…...
SpringBoot事务处理
一、事务回顾 回顾地址: 深入理解数据库事务(超详细)_数据库事务操作_Maiko Star的博客-CSDN博客 事务: 是一组操作的集合,是一个不可分割的工作单位,这些操作要么同时成功,要么同时失败 事…...
网络安全—自学
1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟…...
首页以卡片形式来展示区块链列表数据(Web3项目一实战之五)
我们已然在 Web3 分布式存储 IPFS(Web3项目一实战之四) 介绍了什么是IPFS,以及在本地电脑如何安装它。虽然在上一篇讲解了该怎么安装IPFS,也做了相应的配置,但在本地开发阶段,前端总是无法避免跨域这个远程请求api的”家常便饭的通病“。 很显然,对于出现跨域这类常见问…...
opencv使用pyinstaller打包错误:‘can‘t find starting number (in the name of file)
使用Python语言和opencv模块在pycharm中编辑的代码运行没问题,但是在使用pyinstaller打包后出现错误can‘t find starting number (in the name of file) [ERROR:0] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-q3d_8t8e\opencv\modules\videoi…...
4.一维数组——用数组处理求Fibonacci数列前20项
文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 四、结果显示 前言 本系列为一维数组编程题,点滴成长,一起逆袭。 一、题目描述 用数组处理求Fibonacci数列前20项 二、题目分析 前两项:f[20]{1,1} 后18项:for(…...
讯飞星火知识库文档问答Web API的使用(二)
上一篇提到过星火spark大模型,现在有更新到3.0: 给ChuanhuChatGPT 配上讯飞星火spark大模型V2.0(一) 同时又看到有知识库问答的web api,于是就测试了一下。 下一篇是在ChuanhuChatGPT 中单独写一个基于星火知识库的内容…...
第十三章 深度解读预训练与微调迁移,模型冻结与解冻(工具)
一个完整的代码 pythonCopy codeimport torch import torchvision import torchvision.transforms as transforms import torch.nn as nn import torch.optim as optim # 设置设备(CPU或GPU) device torch.device("cuda" if torch.cuda.is_a…...
tinyViT论文笔记
论文:https://arxiv.org/abs/2207.10666 GitHub:https://github.com/microsoft/Cream/tree/main/TinyViT 摘要 在计算机视觉任务中,视觉ViT由于其优秀的模型能力已经引起了极大关注。但是,由于大多数ViT模型的参数量巨大&#x…...
基于智能软开关的配电网优化调度matlab 采用matlab编程,分析得到了含智能软开关下的配...
基于智能软开关的配电网优化调度matlab 采用matlab编程,分析得到了含智能软开关下的配电网故障恢复能力,包括恢复负荷、失电节点以及节点电压等,程序选择标准ieee33节点系统作为分析对象,采用yalmip编程,运行稳定。 这…...
WindowResizer终极指南:如何强制调整任意Windows窗口尺寸
WindowResizer终极指南:如何强制调整任意Windows窗口尺寸 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些顽固的Windows应用程序窗口尺寸限制而烦恼吗&#…...
【OpenClaw企业级智能体实战】第29篇:边缘智能:在10美元开发板上跑OpenClaw(PicoClaw实战)
摘要:OpenClaw生态的轻量化分支(PicoClaw/ZeroClaw/MimiClaw)突破AI智能体的边缘部署瓶颈,实现10美元级硬件、10MB内存的本地运行。本文剖析技术架构,提供树莓派/ESP32/旧手机的实战部署方案,并探讨其在智能家居、工业物联网等场景的应用前景。核心优势包括成本下沉(硬件…...
PotPlayer字幕翻译插件:3分钟配置,免费解锁全球视频内容
PotPlayer字幕翻译插件:3分钟配置,免费解锁全球视频内容 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为…...
我不是狐狸,我是那Harness Engineering炙
Julia(julialang.org)由Stefan Karpinski、Jeff Bezanson等在2009年创建,目标是融合Python的易用性、C的高性能、R的统计能力、Matlab的科学计算生态。 其核心设计哲学是: 高性能:编译型语言(JIT࿰…...
用一节干电池给STM32F103供电?手把手教你搞定体重秤的低功耗升压电路(附ME2108模块选型)
单节干电池驱动STM32F103的实战指南:从升压电路设计到低功耗优化 在电子设计领域,最令人着迷的挑战之一就是如何用最有限的能源实现最复杂的功能。想象一下,仅凭一节普通的AA干电池(1.5V)就能驱动一个完整的STM32F103微…...
7B参数模型在消费级GPU上的极限:Token生成速度优化全记录
7B参数模型在消费级GPU上的极限:Token生成速度优化全记录 当你在RTX 3090上加载7B参数模型时,是否经历过这样的场景——看着显存占用接近饱和,而token生成速度却像蜗牛爬行?这背后是显存带宽、计算核心利用率、批处理策略等多重因…...
Zemax多重结构仿真分光板的光路设计与优化
1. 分光板光路仿真的核心挑战 在光学系统设计中,分光板是实现光束分束的关键元件。传统单一路径仿真无法准确模拟分光板同时产生的透射和反射光路,这正是Zemax多重结构功能大显身手的地方。我曾在激光雷达接收端设计中,就遇到过需要同时分析分…...
保姆级教程:在vsomeip中为你的SOME/IP服务开启E2E保护(Profile 4配置详解)
深入实践:基于vsomeip的SOME/IP服务E2E保护配置全指南 在汽车电子系统开发中,功能安全始终是核心考量。当两个ECU通过SOME/IP协议通信时,如何确保消息在传输过程中不被篡改或丢失?这就是E2E(端到端)保护要解…...
Maomi.In | .NET 全能多语言解决方案碳
AI Agent 时代的沙箱需求 从 Copilot 到 Agent:执行能力的质变 在生成式 AI 的早期阶段,应用主要以“Copilot”形式存在,AI 仅作为辅助生成建议。然而,随着 AutoGPT、BabyAGI 以及 OpenAI Code Interpreter(现为 Advan…...
