C语言:顺序表详解

发布时间:2026/8/1 7:43:39

C语言:顺序表详解
C语言顺序表详解SeqList · 连续内存里的线性表 · 从结构定义到动态扩容一次讲透一、什么是顺序表线性表是n个相同类型元素的有序序列。顺序表是线性表最朴素的实现——用一段连续的内存依次存放元素。数组就是最简单的顺序表。但顺序表通常指带容量管理的动态数组能自动扩容、能插入删除。▶ 顺序表三要素连续内存、相同类型、逻辑顺序物理顺序。二、结构定义静态 vs 动态2.1 静态顺序表#define MAX_SIZE 100typedef struct {int data[MAX_SIZE]; //定长数组int size; //当前元素个数} SeqListStatic;缺点容量写死。存满了要么拒绝要么溢出——毫无弹性。2.2 动态顺序表推荐typedef struct {int* data; //指向堆上的连续内存int size; //当前元素个数int capacity; //容量最多能存多少个} SeqList;▶ 动态顺序表的核心思想容量不够就 realloc 扩容元素内存由 malloc 管着。三、初始化与销毁void seqlist_init(SeqList* sl, int init_cap) {sl-data (int*)malloc(init_cap * sizeof(int));sl-size 0;sl-capacity init_cap;}void seqlist_destroy(SeqList* sl) {free(sl-data);sl-data NULL;sl-size sl-capacity 0;}▶ 每次 malloc 都有对应的 free。初始化时分配销毁时归还成对出现。四、尾插与尾删最常用的操作void seqlist_push_back(SeqList* sl, int val) {if (sl-size sl-capacity) {seqlist_grow(sl); //扩容}sl-data[sl-size] val;}void seqlist_pop_back(SeqList* sl) {if (sl-size 0) sl-size--;}尾插的时间复杂度 O(1)均摊尾删 O(1)——这是顺序表最擅长的操作。五、动态扩容核心中的核心void seqlist_grow(SeqList* sl) {int new_cap sl-capacity 0 ? 4 : sl-capacity * 2;int* tmp (int*)realloc(sl-data, new_cap * sizeof(int));if (tmp NULL) {perror(realloc failed);exit(1);}sl-data tmp;sl-capacity new_cap;}扩容策略容量×2均摊后每次插入 O(1)最经典的策略固定N每次插入均摊 O(N)性能差realloc 返回值要用临时变量接失败时原指针不丢▶ 扩容量×2 的原因均摊分析。N次插入的总 realloc 成本 O(N)平均每次 O(1)。六、任意位置插入与删除6.1 指定位置插入pos ∈ [0, size]int seqlist_insert(SeqList* sl, int pos, int val) {if (pos 0 || pos sl-size) return 0;if (sl-size sl-capacity) seqlist_grow(sl);//从后往前搬移元素给pos腾位置for (int i sl-size; i pos; i--)sl-data[i] sl-data[i - 1];sl-data[pos] val;sl-size;return 1;}6.2 指定位置删除int seqlist_erase(SeqList* sl, int pos) {if (pos 0 || pos sl-size) return 0;//从前往后搬移覆盖被删位置for (int i pos; i sl-size - 1; i)sl-data[i] sl-data[i 1];sl-size--;return 1;}▶ 插入/删除的平均时间复杂度 O(N)——这是顺序表最贵的操作。频繁中间插入请考虑链表。七、查找与修改int seqlist_find(SeqList* sl, int val) {for (int i 0; i sl-size; i)if (sl-data[i] val) return i;return -1;}//按下标访问O(1)随机访问顺序表的杀手锏int seqlist_at(SeqList* sl, int idx, int* out) {if (idx 0 || idx sl-size) return 0;*out sl-data[idx];return 1;}▶ 按下标访问 O(1) 是顺序表相对链表的绝对优势——数据在内存里连续存放地址直接可算data[i] data i*sizeof(int)。八、顺序表 vs 链表┌──────────┬───────────────┬───────────────┐│ │ 顺序表 │ 链表 │├──────────┼───────────────┼───────────────┤│ 随机访问 │ O(1) ★ │ O(n) ││ 尾插尾删 │ O(1) ★ │ O(1) ││ 中间插入 │ O(n) │ O(1) ★ ││ 缓存友好 │ ★ 好 │ 差 ││ 空间 │ 连续可能浪费│ 分散有指针开销││ 扩容 │ realloc │ 无需动态节点│└──────────┴───────────────┴───────────────┘▶ 结论频繁按下标访问 → 顺序表频繁中间插入删除 → 链表。工程里两者结合才是常态。九、八条常见错误① 忘了检查 pos 越界——插入/删除前不验证下标静默写坏内存② size 和 capacity 混淆——size是元素个数capacity是容量③ 扩容后忘了更新 capacity——下次插入直接溢出④ realloc 返回值直接赋给原指针——失败时空指针丢失原数据⑤ 插入从前往后搬移——应该从后往前否则覆盖还没搬的元素⑥ 删除从后往前搬移——应该从前往后⑦ 销毁后不置 NULL——野指针⑧ 结构体按值传参——复制整个结构修改无效要传指针十、总结▶ 顺序表 连续内存 容量管理。数组是它的静态形态动态数组是它的完全体。▶ 三个状态量size有多少、capacity能存多少、data存在哪。▶ 扩容×2 realloc 临时变量接收是顺序表的两条铁律。▶ 随机访问 O(1) 是它的王牌中间插入 O(n) 是它的软肋。▶ 凡是按下标存取、尾部增删的场合顺序表永远是最优解。The first rule of Fight Club is: you do not talk about Fight Club.—— Tyler Durden, Fight Club—— 顺序表的第一条规则是下标永远从0开始。第二条规则永远不要越界。— END —

相关新闻

STM32CubeMX + VSCode + Makefile/CMake:构建现代化嵌入式开发环境

STM32CubeMX + VSCode + Makefile/CMake:构建现代化嵌入式开发环境

2026/8/1 7:33:39

1. 从“IDE依赖”到“工具链自由”:为什么选择 CubeMX VSCode?如果你和我一样,是从51单片机、AVR,或者更早的Keil MDK-ARM时代一路走过来的嵌入式开发者,大概率会对那个“一个IDE包办一切”的模式又爱又恨。爱的是它开…

Unity中VLC播放RTSP流高延迟问题全链路分析与实战优化

Unity中VLC播放RTSP流高延迟问题全链路分析与实战优化

2026/8/1 7:33:39

1. 项目概述:当Unity遇上RTSP,为何VLC播放器成了“慢动作”专家? 在数字孪生、安防监控、远程教育或者任何需要将实时视频流集成到Unity应用中的场景里,RTSP(实时流传输协议)是一个绕不开的技术选项。而VLC…

CPU全面解析:从芯片制造到应用场景与选购指南

CPU全面解析:从芯片制造到应用场景与选购指南

2026/8/1 7:33:39

1. 从“计算器”到“大脑”:CPU到底是什么?我们每天都在和它打交道,但可能从未真正了解过它。当你滑动手机、敲击键盘、点击鼠标时,背后那个默默进行亿万次运算的核心,就是中央处理器,也就是我们常说的CPU。…

从零制作专业混音带:DAW实战与音频处理全流程

从零制作专业混音带:DAW实战与音频处理全流程

2026/8/1 8:43:44

在音乐制作和混音领域,混音带(Mixtape)是一种重要的创作形式,它允许制作人和 DJ 对现有音乐素材进行重新编排、混音和二次创作,形成全新的听觉体验。对于想要进入音乐制作或希望提升混音技能的人来说,理解如…

Nintendo Switch游戏安装终极指南:Awoo Installer三种方法完全解析

Nintendo Switch游戏安装终极指南:Awoo Installer三种方法完全解析

2026/8/1 8:43:44

Nintendo Switch游戏安装终极指南:Awoo Installer三种方法完全解析 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游戏安…

SpaceX花600亿美元买了个代码编辑器?不,马斯克买的是AI时代的入口

SpaceX花600亿美元买了个代码编辑器?不,马斯克买的是AI时代的入口

2026/8/1 8:43:44

SpaceX花600亿美元买了个代码编辑器?不,马斯克买的是AI时代的入口上市第四天就出手,这操作看起来离谱,但背后藏着一个极其清醒的逻辑。2026年6月16日,一条消息震动了整个科技圈。 SpaceX,一家造火箭、发卫星…

FPGA实现m序列:从LFSR原理到硬件代码与调试实战

FPGA实现m序列:从LFSR原理到硬件代码与调试实战

2026/8/1 8:43:44

1. 项目概述:从理论到硬件的伪随机序列之旅 在数字通信、加密、雷达测距和芯片测试这些领域,我们常常需要一个看起来完全随机、但又能被精确复现的序列。这就是伪随机序列,而m序列(最大长度线性反馈移位寄存器序列)是其…

FlowUs CLI 工具实战:AI 助手集成与命令行自动化操作指南

FlowUs CLI 工具实战:AI 助手集成与命令行自动化操作指南

2026/8/1 8:43:44

1. 先搞清楚 FlowUs CLI 到底能帮你解决什么实际问题 如果你已经在用 FlowUs 做文档、任务或项目管理,现在可以直接在命令行里操作整个工作空间了。FlowUs 新出的 CLI 工具,核心价值不是让你多学一个命令,而是把 Codex、WorkBuddy 这类 AI 助…

Spring Boot 入门指南:从零开始构建 Java Web 应用

Spring Boot 入门指南:从零开始构建 Java Web 应用

2026/8/1 8:33:43

1. Spring Boot 简介 Spring Boot 是 Spring 框架的一个子项目,旨在简化 Spring 应用的初始搭建和开发过程。它通过自动配置、起步依赖和嵌入式服务器等特性,让开发者能够快速创建独立运行、生产级别的 Spring 应用。 2. Spring Boot 的核心特性 自动…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/30 9:53:22

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/8/1 0:15:49

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/8/1 4:47:48

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

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

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

2026/8/1 0:03:03

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

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

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

2026/8/1 0:03:03

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

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

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

2026/8/1 0:03:03

告别游戏崩溃: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…

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

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

2026/8/1 0:03:03

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

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

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

2026/8/1 0:03:03

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

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

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

2026/8/1 0:03:03

告别游戏崩溃: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…