[{"content":"顺序表的基本操作，唯一难点在于[[#增删]]时，位序（从1开始）与数组下标（从0开始）不一致。在处理此两者关系时，只需记住位序物理上是数组下标的后一位。比如 L-\u0026gt;length 作为下标，指向数组最后一位的后一位。脑袋中有这一层映射，算法就不会写错。\nADT接口 #define MaxSize 50 typedef int ElemType; /* 顺序表定义（408 王道标准） */ typedef struct { ElemType data[MaxSize]; int length; } SqList; /* ── 简单操作（前缀 SL_ 避免与链表函数名冲突） ── */ void SL_InitList (SqList *L); void SL_DestroyList (SqList *L); bool SL_ListEmpty (SqList L); int SL_ListLength (SqList L); void SL_PrintList (SqList L); /* 按位序插入/删除（位序从 1 开始） */ bool SL_ListInsert (SqList *L, int i, ElemType e); bool SL_ListDelete (SqList *L, int i, ElemType *e); /* 按位序取值，按值查找位序（未找到返回 0） */ bool SL_GetElem (SqList L, int i, ElemType *e); int SL_LocateElem (SqList L, ElemType e); 增删 顺序表按位序操作（从 1 开始），但底层 data[] 是数组下标（从 0 开始）。所有易错点都源于这层映射：\ndata 下标 = 位序 - 1\n插入 for(int j = L-\u0026gt;length; j \u0026gt;= i; j--) L-\u0026gt;data[j] = L-\u0026gt;data[j-1]; L-\u0026gt;data[i-1] = e; 循环中 j 不是位序，而是数组下标——它表示\u0026quot;待写入的位置\u0026quot;：\nj 的值 操作 含义 L-\u0026gt;length data[length] = data[length-1] 最后一个元素右移一格 \u0026hellip; \u0026hellip; 逐个右移 i data[i] = data[i-1] 把位序 i 处的元素也腾出 循环结束后，data[i-1]（位序 i 对应的下标）已空出，直接写入 e。\n易错：若写成 j \u0026gt; i 配合 data[i] = e，位序 1 处的元素不会被移动，插入位置偏移一格。\n删除 *e = L-\u0026gt;data[i-1]; // 先保存被删元素 while(i \u0026lt; L-\u0026gt;length) { // i 直接当循环变量 L-\u0026gt;data[i-1] = L-\u0026gt;data[i]; i++; } L-\u0026gt;length--; 取出 data[i-1] 后，i 的\u0026quot;位序\u0026quot;使命已经结束，直接复用它做前移循环的下标。每轮 data[i-1] = data[i] 就是把后一个元素覆盖到前一个位置，无需额外引入变量。\n小结 插入是从后往前腾位置，删除是从前往后填空位；写对的关键就是搞清楚循环变量到底是下标还是位序。\n","permalink":"https://robb3n.site/cs/%E7%AE%97%E6%B3%95/%E9%A1%BA%E5%BA%8F%E8%A1%A8%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C/","summary":"顺序表操作的核心在于理清位序（从1开始）与数组下标（从0开始）的映射关系。插入时从后往前移动元素腾出位置，删除时从前往后覆盖填补空缺。掌握下标=位序-1的转换，即可避免常见错误。","title":"顺序表：基本操作"},{"content":"关于我 CS 在读，对操作系统、系统设计和大模型应用感兴趣。喜欢把学到的东西写下来，既是梳理也是分享。\n这个博客 记录 CS 系统知识、技术落地实践与个人思考。主要涵盖：\n技术 — 操作系统、编程语言、系统设计、大模型应用 随笔 — 学习方法、工具流程、杂感 读书 — 技术书籍与非虚构阅读笔记 技术栈 站点生成：Hugo + PaperMod 内容管理：Obsidian → rsync → Hugo 后端管理：Go（chi + JWT） 评论系统：giscus 访问统计：GoatCounter 联系方式 GitHub: robb3n Email: 可通过 GitHub 找到我 ","permalink":"https://robb3n.site/about/","summary":"\u003ch2 id=\"关于我\"\u003e关于我\u003c/h2\u003e\n\u003cp\u003eCS 在读，对操作系统、系统设计和大模型应用感兴趣。喜欢把学到的东西写下来，既是梳理也是分享。\u003c/p\u003e\n\u003ch2 id=\"这个博客\"\u003e这个博客\u003c/h2\u003e\n\u003cp\u003e记录 CS 系统知识、技术落地实践与个人思考。主要涵盖：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e技术\u003c/strong\u003e — 操作系统、编程语言、系统设计、大模型应用\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e随笔\u003c/strong\u003e — 学习方法、工具流程、杂感\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e读书\u003c/strong\u003e — 技术书籍与非虚构阅读笔记\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"技术栈\"\u003e技术栈\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e站点生成：\u003ca href=\"https://gohugo.io/\"\u003eHugo\u003c/a\u003e + \u003ca href=\"https://github.com/adityatelange/hugo-PaperMod\"\u003ePaperMod\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e内容管理：Obsidian → rsync → Hugo\u003c/li\u003e\n\u003cli\u003e后端管理：Go（chi + JWT）\u003c/li\u003e\n\u003cli\u003e评论系统：\u003ca href=\"https://giscus.app/\"\u003egiscus\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e访问统计：\u003ca href=\"https://www.goatcounter.com/\"\u003eGoatCounter\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"联系方式\"\u003e联系方式\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eGitHub: \u003ca href=\"https://github.com/robb3n\"\u003erobb3n\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eEmail: 可通过 GitHub 找到我\u003c/li\u003e\n\u003c/ul\u003e","title":"关于"}]