数据结构入门系列——顺序表详解:概念、分类与动态实现

发布时间:2026/8/26 15:06:32

数据结构入门系列——顺序表详解:概念、分类与动态实现
「 每日一句 · Daily Quote 」“我这个人走得很慢但是我从不后退。”— 亚伯拉罕·林肯文章目录前言一、线性表二、顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表三、动态顺序表的实现3.1 定义动态顺序表的结构3.2 初始化顺序表3.3 检查空间容量是否足够3.4 打印顺序表3.5 销毁顺序表3.6 尾插3.7 头插3.8 尾删3.9 头删3.10 在指定位置之前插入数据3.11 删除pos位置的数据3.12 查找总结前言数据结构是程序员的必修内功而顺序表是最基础、最常用的线性结构之一。本文将从线性表的概念入手介绍顺序表的定义及其与数组的区别对比静态与动态顺序表的优劣重点讲解动态顺序表的完整实现包括初始化、扩容、头尾插入删除、指定位置插入删除、查找等核心接口并逐段分析代码逻辑。掌握顺序表是学习链表、栈、队列等复杂数据结构的第一步。一、线性表线性表linear list是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中广泛使用的数据结构常见的线性表顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构也就说是连续的一条直线。但是在物理结构上并不⼀定是连续的线性表在物理上存储时通常以数组和链式结构的形式存储。二、顺序表2.1 概念与结构概念顺序表是用⼀段物理地址连续的存储单元依次存储数据元素的线性结构一般情况下采用数组存储。顺序表和数组的区别顺序表的底层结构是数组对数组的封装实现了常用的增删改查等接口打个比方数组相当于未经雕琢的“基础食材/菜品”仅提供最底层的连续物理存储能力;而顺序表则是以此为核心原料进行高级封装后的“完整料理”其底层结构依然是原生数组却拥有增、删、改、查等一系列标准数据结构接口2.2 分类2.2.1 静态顺序表概念使用定长数组存储元素静态顺序表缺陷空间给少了不够用给多了造成空间浪费2.2.2 动态顺序表三、动态顺序表的实现3.1 定义动态顺序表的结构typedefintSLDataType;typedefstructSeqList{SLDataType*arr;intsize;//有效数据个数intcapacity;//空间容量}SL;typedef int SLDataType对类型重命名: 方便未来需要储存其他新的类型变量typedef struct SeqList { ... } SL;结构体定义与别名: 提升书写效率SLDataType* arr首元素地址size有效数据个数: 记录当前顺序表中实际已存入的元素数量capacity物理容量上限: 指该顺序表最大能储存的元素个数3.2 初始化顺序表//初始化voidSLInit(SL*ps){ps-arrNULL;ps-sizeps-capacity0;}让arr置为空,size,capacity置为03.3 检查空间容量是否足够voidCheckcapacity(SL*ps){assert(ps);if(ps-sizeps-capacity){//检查空间容量是否为0intnewcapcity(ps-capacity0)?4:ps-capacity*2;//扩容//realloc第二个参数,单位是字节SLDataType*tmp(SLDataType*)realloc(ps-arr,newcapcity*sizeof(SLDataType));//扩容失败if(tmpNULL){perror(realloc fail);exit(1);}//扩容成功ps-arrtmp;ps-capacitynewcapcity;}}如果size capacity,说明容量已经满了,需要扩容检查空间容量是否为0,如果空间容量为0,则默认赋4个元素空间;如果空间容量不为0, 则按 2 倍增长用realloc进行扩容,并用临时变量tmp接收判断扩容是否成功,若扩容成功,则更新结构体元数据3.4 打印顺序表//打印voidSLPrint(SL*ps){assert(ps);for(inti0;ips-size;i){printf(%d ,ps-arr[i]);}printf(\n);}用for循环遍历所有元素并打印换行3.5 销毁顺序表//销毁voidSLDestroy(SL*ps){assert(ps);ps-capacityps-size0;free(ps-arr);ps-arrNULL;}令capacity和size都为0free掉之前通过realloc申请的内存将arr指针置空,规避野指针3.6 尾插//尾插voidSLPushBack(SL*ps,SLDataType x){assert(ps);Checkcapacity(ps);ps-arr[ps-size]x;}先checkcapacity检查一下空间容量是否足够有效元素自增1,并且将数据写入3.7 头插//头插voidSLPushFront(SL*ps,SLDataType x){assert(ps);Checkcapacity(ps);for(intips-size;i0;i--){ps-arr[i]ps-arr[i-1];}ps-arr[0]x;//增加size数量ps-size;}先用Checkcapcity检查空间容量是否足够利用for循环将每个元素向后移动1位将首位元素写入并将有效元素个数加13.8 尾删//尾删voidSLPopBack(SL*ps){//检查ps和size都不为空assert(psps-size);Checkcapacity(ps);ps-size--;}确保ps和size都不为空将有效元素个数减13.9 头删//头删voidSLPopFront(SL*ps){//检查assert(psps-size);for(inti0;ips-size-1;i){ps-arr[i]ps-arr[i1];}ps-size--;}先用Checkcapacity检查空间容量是否充足将每个元素复制到前一个元素位置将有效元素个数减13.10 在指定位置之前插入数据voidSLInsert(SL*ps,intpos,SLDataType x){assert(pspos0posps-size);//检查空间是否足够Checkcapacity(ps);for(intips-size;ipos;i--){ps-arr[i]ps-arr[i-1];}ps-arr[pos]x;ps-size;}检查空间容量是否足够将下标区间[pos, size - 1]内的元素整体向后移动一位。将目标值 x 写入pos位置有效元素个数加13.11 删除pos位置的数据//删除pos位置的数据voidSLErase(SL*ps,intpos){assert(pspos0posps-size);for(intipos;ips-size-1;i){ps-arr[i]ps-arr[i1];}ps-size--;}将下标区间[pos, size - 1]内的元素整体向前移动一位。有效元素个数减13.12 查找//查找intSLFind(SL*ps,SLDataType x){assert(ps);for(inti0;ips-size;i){//找到了if(ps-arr[i]x)returni;}//没找到return-1;}将所有元素遍历一遍,寻找目标元素找到目标元素,返回该元素下标没找到该元素,返回-1总结以上就是本篇博客的核心内容。本文介绍了线性表的概念与分类重点讲解了顺序表的定义及其两种实现方式静态与动态顺序表详细实现了动态顺序表的常用接口初始化、扩容、头尾插入删除、指定位置插入删除、查找、打印与销毁并分析了各接口的代码逻辑与注意事项。掌握顺序表就为后续学习链表、栈、队列等数据结构打下了坚实基础。

相关新闻

深入yoyo-evolve自我进化机制:AI每8小时唤醒一次,自动改写自己源码的全过程

深入yoyo-evolve自我进化机制:AI每8小时唤醒一次,自动改写自己源码的全过程

2026/8/26 14:56:32

深入yoyo-evolve自我进化机制:AI每8小时唤醒一次,自动改写自己源码的全过程 【免费下载链接】yoyo-evolve A coding agent that evolves its own source, in public — 200 lines of Rust on day one, every commit since agent-written and tests-gated…

Sequential vs Model:Keras.NET构建复杂多输入神经网络的进阶指南

Sequential vs Model:Keras.NET构建复杂多输入神经网络的进阶指南

2026/8/26 14:56:32

Sequential vs Model:Keras.NET构建复杂多输入神经网络的进阶指南 【免费下载链接】Keras.NET Keras.NET is a high-level neural networks API for C# and F#, with Python Binding and capable of running on top of TensorFlow, CNTK, or Theano. 项目地址: h…

有自研算法的 GEO 服务商,价格会不会更高?先看成本结构再判断

有自研算法的 GEO 服务商,价格会不会更高?先看成本结构再判断

2026/8/26 14:56:32

有自研算法的 GEO 服务商不一定报价更高,但它的成本结构通常和“代发内容、堆外链、套模板”的服务不同。判断价格是否合理,不能只看有没有“自研算法”四个字,而要看算法具体解决了什么问题:是否能持续监测 AI 搜索可见度、是否能…

Linux --进程控制

Linux --进程控制

2026/8/26 16:06:35

进程的诞生&#xff1a;fork 与 vfork fork 函数初识 在Linux中&#xff0c;fork 是创建新进程的唯一方式&#xff08;从用户态视角看&#xff09;。它通过复制调用进程&#xff08;父进程&#xff09;来生成一个全新的进程&#xff08;子进程&#xff09;。 #include <u…

The Words in the Dictionary Are Arranged in Order: Understanding Alphabetization

The Words in the Dictionary Are Arranged in Order: Understanding Alphabetization

2026/8/26 16:06:35

&#x1f680; TL;DR – Key TakeawaysAlphabetization is the systematic arrangement of words based on the order of letters in the English alphabet (A-Z). It’s not just about memorizing A-B-C—it’s about understanding letter priority, case sensitivity, punc…

免费开源的 ncmdump:3 步把网易云 NCM 音乐转成通用 MP3

免费开源的 ncmdump:3 步把网易云 NCM 音乐转成通用 MP3

2026/8/26 16:06:35

免费开源的 ncmdump&#xff1a;3 步把网易云 NCM 音乐转成通用 MP3 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump ncmdump 是一款免费开源的本地转换小工具&#xff0c;专门把网易云 NCM 加密音乐转成通用 MP3&#xff0c;全程离线…

Wan2.2-TI2V-5B 720P视频生成本地部署完整指南

Wan2.2-TI2V-5B 720P视频生成本地部署完整指南

2026/8/26 16:06:35

Wan2.2-TI2V-5B 720P视频生成本地部署完整指南 【免费下载链接】Wan2.2-TI2V-5B Wan2.2-TI2V-5B是一款开源的先进视频生成模型&#xff0c;基于创新的混合专家架构&#xff08;MoE&#xff09;设计&#xff0c;显著提升了视频生成的质量与效率。该模型支持文本生成视频和图像生…

为什么越难解决的问题,往往越有价值?

为什么越难解决的问题,往往越有价值?

2026/8/26 16:06:35

我们经常会发现一个现象&#xff1a; 越难解决的问题&#xff0c;往往创造的价值越高。 背后当然有很多方面的原因&#xff0c;主要原因之一是这种现象其实是一种幸存者偏差&#xff0c;因为也存在着很多难解决却没有什么价值的问题&#xff0c;这些问题没有人去解决而已。例如…

多模态内容的 AI 工业化生产与 GEO 适配规范

多模态内容的 AI 工业化生产与 GEO 适配规范

2026/8/26 15:56:34

【摘要】生成式搜索的引用路径正在从纯文本网页向图片、短视频、音频等多元模态扩展&#xff0c;组织的内容生产体系若仍以文本为中心&#xff0c;将失去大量被 AI 引用的场景覆盖。围绕多模态内容的 GEO 价值、AI 驱动工业化生产链路、图文视频音频的分模态适配规范与人机协同…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/26 1:50:39

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/26 1:49:16

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

2026/8/26 0:05:45

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要&#xff1a; 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数&#xff08;random()、unifor…

Hermes接入团队协作后,我推翻了三个效率假设

Hermes接入团队协作后,我推翻了三个效率假设

2026/8/26 0:05:45

聊《Hermes真能提效吗&#xff1f;先看流程里最慢的那一步》之前&#xff0c;先说一句实在的&#xff1a;别急着背概念&#xff0c;先看它在真实项目里到底解决什么问题。摘要团队把 Hermes 接进项目三个月后&#xff0c;交付速度没有提升反而慢了。复盘后发现&#xff0c;最先…

免费AI大模型调教指南:打造专属网文写作助手

免费AI大模型调教指南:打造专属网文写作助手

2026/8/26 0:05:45

1. 先搞清楚“AI小说扩展模式”到底能帮你做什么如果你是一个刚开始写网文、或者卡在L3级别以下的作者&#xff0c;最头疼的可能是情节推进不下去、人物对话干瘪&#xff0c;或者世界观设定不够丰满。自己对着空白文档硬憋&#xff0c;效率很低。这时候&#xff0c;一个能理解你…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具&#xff0c;覆盖选题构思、文献整理、内容生成、格式排版等核心场景&#xff0c;真正帮你高效搞定论文难题。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃&#xff1a;XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…