尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
顺序表的插入
文章目录代码为什么插入必须“从后往前”移动如果写反方向从前往后)会怎样边界条件分析重点插入位置表尾追加插入位置表头插入空间已满更新长度代码#includestdio.h#defineMaxSize10// 定义最大长度typedefstruct{intdata[MaxSize];// 静态数组存放数据元素intlength;// 顺序表当前有效长度}SqList;// 顺序表类型定义// 初始化顺序表voidInitList(SqListL){for(inti0;iMaxSize;i){L.data[i]0;// 数组全部置0清除垃圾值}L.length0;// 有效元素个数置 0代表空表}// 位序 i 处插入元素 e 位序 i 从 1 开始boolListInsert(SqListL,inti,inte){// 1. 健壮性检查 边界判断if(i1||iL.length1)returnfalse;// 2. 存储空间检查 数组存满无法插入if(L.lengthMaxSize)returnfalse;// 3. 核心移动逻辑从最后一个元素开始依次向后挪一格for(intjL.length;ji;j--)L.data[j]L.data[j-1];// 4. 插入新元素L.data[i-1]e;// 位序 i 转换为数组下标 i-1// 5. 有效长度1L.length;// 更新有效元素计数告诉程序现在表里有效元素数量 1。// 新增一个有效元素计数器必须 1删除一个计数器必须 - 1。returntrue;}intmain(){SqList L;InitList(L);ListInsert(L,3,3);// 第 3 个位置插入数字 3return0;}为什么插入必须“从后往前”移动假设当前顺序表里有数据[1, 2, 4, 5]length 4即有效元素个数为4。我们现将在位序 3即第3个位置数组下标为2插入元素 3。循环轮次j 的值执行语句物理动作内存视角数组变化下标0~4初始状态---[1, 2, 4, 5, ?]第1轮j4L.data[4]L.data[3]把下标3的5复制到下标4向后腾挪[1, 2, 4, 5, 5]第2轮j3L.data[3]L.data[2]把下标2的4复制到下标3向后腾挪[1, 2, 4, 4, 5]结束循环j2条件 ji (23) 为假退出下标2即位序3的位置空出来了[1, 2, 4, 4, 5]最后执行L.data[2] 3数组变为[1, 2, 3, 4, 5]。如果写反方向从前往后)会怎样如果写反方向从前往后 for(ji; jL.length; j)会怎样第1轮L.data[2] L.data[1]把2复制到下标2→ 数组变成 [1, 2, 2, 4, 5]。下标2的原值 4 被覆盖丢失了。后面无论怎么挪4 和 5 都再也找不回来数据彻底损坏。结论必须倒着移动保证每个元素在被覆盖前已经先被复制到后面的安全位置了。边界条件分析重点插入位置表尾追加插入位置i L.length 1表尾追加当前有 length 个元素元素之间、头尾一共会多出length 1个空位 用来插入新元素。i 1表头空位i length1表尾空位插入位置表头插入插入位置 i 1表头插入j 从 length 一直减到 1所有元素整体后移一位。执行 L.data[0] e;插入到表头。空间已满空间已满L.length MaxSize直接return false防止数组越界写入保护内存安全。更新长度数组只是存数据的容器length 是记录有效元素的计数器新增一个有效元素计数器必须 1删除一个计数器必须 - 1。L.length;更新有效元素计数告诉程序现在表里有效元素数量 1。如果插入后不更新 length后续所有代码全部逻辑错乱出现越界、读取不到元素等 bug。
RELATED

相关推荐

基于C++17实现线程安全的信号槽机制:解决模块通信与多线程难题

基于C++17实现线程安全的信号槽机制:解决模块通信与多线程难题

1. 项目概述与核心价值最近在重构一个老旧的C服务端框架,其中一个痛点就是模块间的通信。早期为了图省事,用了不少回调函数和裸指针,代码耦合得跟意大利面似的,调试起来更是噩梦。尤其是在多线程环境下,一个对象在A线程…

📅 2026/9/13 8:26:05
基于ET框架的AI行为可视化调试面板设计与实现

基于ET框架的AI行为可视化调试面板设计与实现

1. 项目概述:为什么我们需要一个AI行为调试面板?在游戏服务器开发,尤其是MMO这类对实时性和逻辑复杂度要求极高的项目中,AI(人工智能)行为的调试一直是个老大难问题。你写了一大堆状态机、行为树&#xff0…

📅 2026/7/24 3:16:07
Cocos Creator安卓打包全攻略:从环境配置到Release签名避坑指南

Cocos Creator安卓打包全攻略:从环境配置到Release签名避坑指南

1. 项目概述:为什么安卓打包总让人头疼?如果你用 Cocos Creator 3.x 开发过游戏,并且尝试过打包成安卓 APK,那你大概率经历过这样的场景:在编辑器里跑得好好的游戏,一到打包环节,各种报错就像雨…

📅 2026/8/2 6:04:33
MORE NEWS

更多资讯

📰

8款AIGC降重工具测评与继续教育应用指南

1. AIGC降重工具测评背景 最近在学术圈和内容创作领域,AIGC(AI生成内容)检测和降重需求呈现爆发式增长。作为一名长期关注AI技术应用的从业者,我注意到越来越多的教育机构和企业开始采用AIGC检测工具来识别AI生成内容。特别是在继…

📰

从EasyExcel到Apache Fesod:复杂Excel导入导出的迁移实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

12 个 Verilog 文件搭出可仿真 GPU:tiny-gpu 从跑通到读懂的教程

12 个 Verilog 文件搭出可仿真 GPU:tiny-gpu 从跑通到读懂的教程 【免费下载链接】tiny-gpu A minimal GPU design in Verilog to learn how GPUs work from the ground up 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny-gpu 两个 22 矩阵、4 个线…

📰

Moode Player深度解析:树莓派上的开源Hi-Fi音频系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

32GB显存不够?LoRA/QLoRA微调大模型OOM自救指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

RemoveWindowsAI 完整指南:4 层 11 个开关,把 Windows 11 的 AI 功能强拔干净

RemoveWindowsAI 完整指南:4 层 11 个开关,把 Windows 11 的 AI 功能强拔干净 【免费下载链接】RemoveWindowsAI Force Remove Copilot, Recall and More in Windows 11 项目地址: https://gitcode.com/GitHub_Trending/re/RemoveWindowsAI 一、痛…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬