[{"data":1,"prerenderedAt":2239},["ShallowReactive",2],{"blog-taxonomies":3,"blog-stats":507,"post-数据结构\u002F数据结构-线性表顺序表":1083},[4,11,16,21,25,29,36,39,44,47,52,58,63,66,71,76,80,84,87,93,96,101,105,110,113,117,122,127,132,136,141,143,146,151,155,157,162,165,169,173,176,179,183,186,190,193,197,200,205,208,211,214,219,222,228,234,237,239,245,249,253,256,260,266,271,276,281,283,287,290,293,298,301,304,306,308,311,314,316,318,321,327,332,337,342,347,352,354,356,358,361,365,367,369,371,374,376,378,381,386,390,393,396,400,404,407,411,413,415,417,421,423,425,428,431,433,435,437,439,441,443,446,448,450,454,456,459,461,463,465,467,469,471,473,477,483,486,488,491,493,495,497,499,501,503,505],{"category":5,"tags":6},"笔记",[7,8,9,10],"QQ","插件","LiteLoader","美化",{"category":12,"tags":13},"其他",[14,15,10],"博客","IP签名",{"category":17,"tags":18},"杂谈",[19,20],"互联网","观点",{"category":5,"tags":22},[14,23,24],"GitHub","数据可视化",{"category":5,"tags":26},[14,27,28],"访问统计","不蒜子",{"category":30,"tags":31},"工具",[32,33,34,35],"Python","爬虫","选课脚本","广州大学",{"category":5,"tags":37},[38,5],"数学分析",{"category":40,"tags":41},"算法",[42,40,43],"数据结构","线性表",{"category":40,"tags":45},[42,46],"复习",{"category":5,"tags":48},[49,50,51],"高等代数","线性代数","知识点",{"category":5,"tags":53},[14,54,55,56,57],"Typora","PicGo","图床","Markdown",{"category":30,"tags":59},[60,61,62],"Jupyter","工具配置","中文",{"category":30,"tags":64},[65,61,10],"VSCode",{"category":30,"tags":67},[68,69,70,35],"路由器","OpenWrt","校园网",{"category":12,"tags":72},[73,74,75],"网络协议","Wireshark","DEVP2P",{"category":5,"tags":77},[73,74,78,79],"Lua","解码器",{"category":5,"tags":81},[82,5,83],"常微分方程","数学",{"category":5,"tags":85},[86,5,83],"概率论",{"category":30,"tags":88},[89,90,91,92],"Docker","WSL","Windows","磁盘清理",{"category":30,"tags":94},[32,33,95,35],"课程表",{"category":5,"tags":97},[14,98,99,100],"Hexo","Gitalk","评论系统",{"category":5,"tags":102},[14,103,98,104],"Obsidian","写作工具",{"category":12,"tags":106},[107,108,109],"课题研究","泊松分布","参数估计",{"category":12,"tags":111},[107,108,109,112],"组会",{"category":12,"tags":114},[109,115,108,116],"IM模型","统计学",{"category":17,"tags":118},[119,120,121],"软考","网络规划","信息系统项目管理",{"category":30,"tags":123},[124,125,126],"Arch Linux","AppImage","Linux",{"category":5,"tags":128},[129,130,131],"编程语言","计算机科学","内存管理",{"category":5,"tags":133},[134,135],"Canvas","前端",{"category":5,"tags":137},[14,138,139,140],"GitHub Actions","Vite","部署",{"category":5,"tags":142},[135],{"category":5,"tags":144},[135,145],"系统设计",{"category":5,"tags":147},[135,148,149,150],"安全","XSS","CSRF",{"category":152,"tags":153},"项目",[134,154],"PixiJS",{"category":152,"tags":156},null,{"category":40,"tags":158},[42,159,160,161],"栈","队列","JavaScript",{"category":40,"tags":163},[42,164,161],"哈希表",{"category":5,"tags":166},[167,161,168],"ES6","Set",{"category":40,"tags":170},[40,171,172],"动态规划","背包问题",{"category":40,"tags":174},[40,175],"滑动窗口",{"category":40,"tags":177},[42,178,161],"链表",{"category":40,"tags":180},[40,181,161,182],"ACM","面试",{"category":40,"tags":184},[40,161,185],"数据类型转换",{"category":40,"tags":187},[42,188,178,189],"顺序表","TypeScript",{"category":5,"tags":191},[135,154,134,192],"渲染",{"category":5,"tags":194},[135,195,134,196],"富文本编辑","wangEditor",{"category":40,"tags":198},[199,40,178],"力扣",{"category":5,"tags":201},[202,203,204,91],"DNS","加密","网络安全",{"category":5,"tags":206},[135,207],"Axios",{"category":5,"tags":209},[135,207,189,210],"接口封装",{"category":5,"tags":212},[135,213,145],"JWT",{"category":152,"tags":215},[134,216,217,154,218],"画布","React","项目开发",{"category":17,"tags":220},[221],"日志",{"category":5,"tags":223},[224,225,226,227],"Neo4j","图数据库","中心度分析","PageRank",{"category":12,"tags":229},[230,231,232,233],"论文","机器学习","随机森林","保险欺诈",{"category":5,"tags":235},[236],"人工智能",{"category":5,"tags":238},[231,40,32],{"category":12,"tags":240},[241,242,243,244],"共识算法","最长链","区块链","算法设计",{"category":5,"tags":246},[161,247,248,135],"闭包","作用域",{"category":5,"tags":250},[14,138,251,252],"RSS","自动化",{"category":30,"tags":254},[89,90,91,255],"安装",{"category":30,"tags":257},[258,91,259],"MSYS2","开发环境",{"category":5,"tags":261},[262,263,264,265],"团队协作","Git","Commit规范","代码审查",{"category":30,"tags":267},[268,269,270],"oh-my-posh","终端美化","CLI",{"category":5,"tags":272},[273,274,275],"上下文工程","Agent","RAG",{"category":5,"tags":277},[278,279,280],"前端工程化","技术选型","工程基建",{"category":5,"tags":282},[275],{"category":5,"tags":284},[285,286],"SDD","规格驱动开发",{"category":5,"tags":288},[289],"neovim",{"category":5,"tags":291},[292],"技术写作",{"category":5,"tags":294},[295,32,296,89,297],"FastAPI","后端","工程实践",{"category":152,"tags":299},[274,300],"Harness Engineering",{"category":5,"tags":302},[303],"RFC",{"category":152,"tags":305},[274,300,275],{"category":152,"tags":307},[274],{"category":40,"tags":309},[199,40,161,310],"两数之和",{"category":40,"tags":312},[199,40,161,313],"双指针",{"category":40,"tags":315},[199,40,161,178],{"category":40,"tags":317},[199,40,161,175],{"category":40,"tags":319},[199,40,161,320],"回溯",{"category":5,"tags":322},[323,324,325,326],"分布式处理与计算","Spark","Scala","RDD",{"category":5,"tags":328},[323,329,330,331],"线性回归","逻辑回归","监督学习",{"category":5,"tags":333},[323,334,335,336],"数值优化","牛顿法","收敛性",{"category":5,"tags":338},[323,339,340,341],"PCA","数据降维","正则化",{"category":5,"tags":343},[323,344,345,346],"聚类","层次聚类","K-Means",{"category":5,"tags":348},[323,349,350,351],"随机模拟","统计推断","EM算法",{"category":5,"tags":353},[24],{"category":5,"tags":355},[24],{"category":5,"tags":357},[24],{"category":40,"tags":359},[42,360],"图论",{"category":40,"tags":362},[42,363,364],"树","二叉树",{"category":40,"tags":366},[42,160],{"category":40,"tags":368},[42],{"category":40,"tags":370},[42,159],{"category":40,"tags":372},[42,40,373],"复杂度分析",{"category":40,"tags":375},[42,43,178],{"category":40,"tags":377},[42,43,188],{"category":40,"tags":379},[42,380],"基础概念",{"category":17,"tags":382},[383,384,385],"随记","照片","高中",{"category":17,"tags":387},[383,388,389],"团建","战地",{"category":17,"tags":391},[383,392],"生活",{"category":17,"tags":394},[383,395],"文学",{"category":17,"tags":397},[383,398,399],"SCP","模因",{"category":17,"tags":401},[383,402,403],"画集","艺术",{"category":17,"tags":405},[14,406,383],"写作",{"category":17,"tags":408},[383,409,410],"音乐","摇滚",{"category":17,"tags":412},[383,392],{"category":17,"tags":414},[383,409],{"category":17,"tags":416},[383,35,392],{"category":17,"tags":418},[383,419,420],"同人","手书",{"category":17,"tags":422},[383,392],{"category":17,"tags":424},[383,392],{"category":17,"tags":426},[383,427],"植物",{"category":17,"tags":429},[383,430],"读书",{"category":17,"tags":432},[383,392],{"category":17,"tags":434},[383,392],{"category":17,"tags":436},[383,392],{"category":17,"tags":438},[383,392],{"category":17,"tags":440},[383,392],{"category":17,"tags":442},[383,392],{"category":17,"tags":444},[14,445,383],"一周年",{"category":17,"tags":447},[383,392],{"category":17,"tags":449},[383,392],{"category":17,"tags":451},[35,452,453],"开源组织","SITE-193",{"category":17,"tags":455},[383,392],{"category":17,"tags":457},[383,458],"年末",{"category":17,"tags":460},[383,392],{"category":17,"tags":462},[383,392],{"category":17,"tags":464},[14,17],{"category":17,"tags":466},[383,392],{"category":17,"tags":468},[383,392],{"category":17,"tags":470},[383,392],{"category":17,"tags":472},[383,392],{"category":17,"tags":474},[383,475,476],"游戏","Control",{"category":30,"tags":478},[479,480,481,482],"Quadim","图像处理","四叉树","Rust",{"category":17,"tags":484},[14,485],"上线纪念",{"category":17,"tags":487},[383,395],{"category":30,"tags":489},[203,490],"测试",{"category":17,"tags":492},[383],{"category":17,"tags":494},[383,392],{"category":17,"tags":496},[383],{"category":5,"tags":498},[40],{"category":5,"tags":500},[40],{"category":5,"tags":502},[40],{"category":5,"tags":504},[40],{"category":5,"tags":506},[40],[508,512,516,520,524,528,532,536,540,544,548,552,556,560,564,568,572,576,579,583,587,590,594,598,602,606,610,614,618,622,626,630,634,638,642,646,650,654,658,662,666,670,674,678,682,686,690,694,698,702,706,710,714,718,722,726,730,734,738,742,746,750,754,758,762,766,770,774,778,782,786,790,794,798,801,805,809,813,817,821,825,829,833,837,841,845,849,853,857,861,865,869,873,877,881,885,889,893,897,901,904,907,911,915,919,923,927,930,934,938,942,946,950,954,957,961,965,969,973,977,981,984,988,992,996,1000,1004,1007,1011,1015,1019,1023,1027,1031,1035,1039,1043,1047,1051,1055,1059,1063,1067,1071,1075,1079],{"path":509,"words":510,"published":511,"date":156},"\u002Fposts\u002F2024\u002F2024-06-25-liteloaderqqnt",1296,"2024-06-25 11:03:08",{"path":513,"words":514,"published":515,"date":156},"\u002Fposts\u002F2024\u002F2024-06-26-ip签名",0,"2024-06-26 22:53:53",{"path":517,"words":518,"published":519,"date":156},"\u002Fposts\u002F2024\u002F2024-06-29-何加盐中文互联网正在加速崩塌",4853,"2024-06-29 00:47:13",{"path":521,"words":522,"published":523,"date":156},"\u002Fposts\u002F2024\u002F2024-07-12-github-chart",270,"2024-07-12 20:02:50",{"path":525,"words":526,"published":527,"date":156},"\u002Fposts\u002F2024\u002F2024-07-14-访客数统计",192,"2024-07-24 01:34:28",{"path":529,"words":530,"published":531,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-广大选课脚本",110,"2024-07-26 01:34:28",{"path":533,"words":534,"published":535,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数学分析笔记其二",14,"2024-07-26 23:54:02",{"path":537,"words":538,"published":539,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习其二",12856,"2024-07-26 02:48:08",{"path":541,"words":542,"published":543,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-数据结构复习相关",32856,"2024-07-26 02:24:14",{"path":545,"words":546,"published":547,"date":156},"\u002Fposts\u002F2024\u002F2024-07-26-线性代数与空间解析几何知识点全汇总",6110,"2024-07-26 03:27:55",{"path":549,"words":550,"published":551,"date":156},"\u002Fposts\u002F2024\u002F2024-07-31-typora-picgo-兰空图床打造markdown写作环境",311,"2024-07-31 12:56:23",{"path":553,"words":554,"published":555,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-jupyter配置中文",441,"2024-09-02 23:49:05",{"path":557,"words":558,"published":559,"date":156},"\u002Fposts\u002F2024\u002F2024-09-02-自定义vscode背景图片",100,"2024-09-02 23:39:00",{"path":561,"words":562,"published":563,"date":156},"\u002Fposts\u002F2024\u002F2024-09-03-制作gzhu校园网路由器",1423,"2024-09-03 23:43:18",{"path":565,"words":566,"published":567,"date":156},"\u002Fposts\u002F2024\u002F2024-09-26-09-25-2024",136,"2024-09-26 00:49:26",{"path":569,"words":570,"published":571,"date":156},"\u002Fposts\u002F2024\u002F2024-11-04-创建一个网络包解码器分析devp2p协议",1943,"2024-11-04 16:45:19",{"path":573,"words":574,"published":575,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记常微分",16,"2024-12-09 22:51:00",{"path":577,"words":574,"published":578,"date":156},"\u002Fposts\u002F2024\u002F2025-03-09-2024一些笔记概率论","2025-03-09 22:51:00",{"path":580,"words":581,"published":582,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-windows下释放docker占用的wsl空间",164,"2025-03-01 13:54:15",{"path":584,"words":585,"published":586,"date":156},"\u002Fposts\u002F2025\u002F2025-03-01-爬虫实战-爬取广州大学课程表",774,"2025-03-01 14:55:48",{"path":588,"words":530,"published":589,"date":156},"\u002Fposts\u002F2025\u002F2025-04-03-hexo集成gitalk的问题","2025-04-03 14:26:34",{"path":591,"words":592,"published":593,"date":156},"\u002Fposts\u002F2025\u002F2025-09-22-记一次配置obsidian配合hexo写博客",92,"2025-09-22 16:47:52",{"path":595,"words":596,"published":597,"date":156},"\u002Fposts\u002F2025\u002F2025-10-24-10-20课题",204,"2025-10-24 08:15:01",{"path":599,"words":600,"published":601,"date":156},"\u002Fposts\u002F2025\u002F2025-11-02-组会朝花夕拾",501,"2025-11-02 18:56:59",{"path":603,"words":604,"published":605,"date":156},"\u002Fposts\u002F2025\u002F2025-11-05-基于随机加权推断模型im的参数估计算法",481,"2025-11-05 20:51:41",{"path":607,"words":608,"published":609,"date":156},"\u002Fposts\u002F2025\u002F2025-11-09-关于软考高项网规",884,"2025-11-09 19:54:52",{"path":611,"words":612,"published":613,"date":156},"\u002Fposts\u002F2025\u002F2025-11-17-arch-linux运行appimage相关",365,"2025-11-17 09:59:59",{"path":615,"words":616,"published":617,"date":156},"\u002Fposts\u002F2025\u002F2025-11-19-相关概念",2058,"2025-11-19 11:06:20",{"path":619,"words":620,"published":621,"date":156},"\u002Fposts\u002F2025\u002F2025-11-21-web可视化实践canvas",6393,"2025-11-21 14:50:48",{"path":623,"words":624,"published":625,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-使用-github-actions-自动部署基于vite的项目到-github-pages",272,"2025-11-23 01:59:24",{"path":627,"words":628,"published":629,"date":156},"\u002Fposts\u002F2025\u002F2025-11-22-关于前端包管理器npmpnpmyarn和bun",4890,"2025-11-22 21:21:15",{"path":631,"words":632,"published":633,"date":156},"\u002Fposts\u002F2025\u002F2025-11-23-undo-redo-机制具体实现",7839,"2025-11-23 19:15:00",{"path":635,"words":636,"published":637,"date":156},"\u002Fposts\u002F2025\u002F2025-11-27-前端安全-关于xss与crsf",1866,"2025-11-28 02:05:25",{"path":639,"words":640,"published":641,"date":156},"\u002Fposts\u002F2025\u002F2025-12-05-现代协同-2d-画布编辑器pixijs-v8",4285,"2025-12-05 02:00:16",{"path":643,"words":644,"published":645,"date":156},"\u002Fposts\u002F2025\u002F2025-12-07-杂谈-课题组系统设计",3710,"2025-12-07 21:09:33",{"path":647,"words":648,"published":649,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-javascript中的数组方法与栈stack和队列queue的实现",474,"2025-11-29 16:58:15",{"path":651,"words":652,"published":653,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript-实现哈希表",189,"2025-11-27 11:31:39",{"path":655,"words":656,"published":657,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于javascript的set方法",332,"2025-12-25 15:26:18",{"path":659,"words":660,"published":661,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于动态规划(背包问题为例)",1238,"2025-11-17 18:24:04",{"path":663,"words":664,"published":665,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于滑动窗口",712,"2025-11-20 15:04:40",{"path":667,"words":668,"published":669,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-关于链表(javascript)",500,"2025-11-25 13:00:48",{"path":671,"words":672,"published":673,"date":156},"\u002Fposts\u002F2025\u002F2025-12-25-面试算法acm模式构建构建输入输出模板",2051,"2025-12-25 23:09:45",{"path":675,"words":676,"published":677,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascript-数字数组字符串的处理",483,"2025-12-26 11:20:25",{"path":679,"words":680,"published":681,"date":156},"\u002Fposts\u002F2025\u002F2025-12-26-javascripttypescript-的顺序表链表实现",446,"2025-12-26 12:16:12",{"path":683,"words":684,"published":685,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-1-实现基础yuan素渲染和状态控制",2136,"2025-12-28 01:23:08",{"path":687,"words":688,"published":689,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-前端画布设计vol-2-实现富文本编辑",1838,"2025-12-28 02:58:47",{"path":691,"words":692,"published":693,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-算法刷题-关于链表操作",2135,"2025-12-27 16:12:42",{"path":695,"words":696,"published":697,"date":156},"\u002Fposts\u002F2025\u002F2025-12-27-配置dnscrypt-proxy实现加密dns服务windows",1899,"2025-11-15 01:06:37",{"path":699,"words":700,"published":701,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-关于网络请求xhrajaxfetchaxios",7788,"2025-10-28 15:48:46",{"path":703,"words":704,"published":705,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-接口封装与请求规范axios为例",2373,"2025-12-29 01:01:18",{"path":707,"words":708,"published":709,"date":156},"\u002Fposts\u002F2025\u002F2025-12-28-前端-身份验证管理-基于-jwt-token-的实现",2709,"2025-11-23 22:04:41",{"path":711,"words":712,"published":713,"date":156},"\u002Fposts\u002F2025\u002F2025-12-29-记canvas画布项目开发",6254,"2025-12-29 04:52:15",{"path":715,"words":716,"published":717,"date":156},"\u002Fposts\u002F2025\u002Fabout-site",116,"2025-03-31 16:44:24",{"path":719,"words":720,"published":721,"date":156},"\u002Fposts\u002F2025\u002F使用neo4j图数据科学库gds进行中心度分析",143,"2025-04-02 23:37:24",{"path":723,"words":724,"published":725,"date":156},"\u002Fposts\u002F2026\u002F2026-01-03-论文实训草稿",10445,"2026-01-03 14:10:49",{"path":727,"words":728,"published":729,"date":156},"\u002Fposts\u002F2026\u002F2026-01-06-人工智能导论",11461,"2026-01-07 03:25:49",{"path":731,"words":732,"published":733,"date":156},"\u002Fposts\u002F2026\u002F2026-01-07-机器学习相关算法",82,"2026-01-08 02:28:13",{"path":735,"words":736,"published":737,"date":156},"\u002Fposts\u002F2026\u002F2026-01-16-关于低复杂度最长链共识算法设计",4466,"2026-01-16 10:33:23",{"path":739,"words":740,"published":741,"date":156},"\u002Fposts\u002F2026\u002F2026-01-19-杂记2026-01-19",5754,"2026-01-20 01:03:26",{"path":743,"words":744,"published":745,"date":156},"\u002Fposts\u002F2026\u002F2026-01-22-github-action-自动同步博客到-github-主页",1069,"2026-01-22 16:31:47",{"path":747,"words":748,"published":749,"date":156},"\u002Fposts\u002F2026\u002F2026-03-01-windows-wsl安装docker",257,"2026-03-01 20:55:31",{"path":751,"words":752,"published":753,"date":156},"\u002Fposts\u002F2026\u002F2026-03-14-关于-msys2",701,"2026-03-15 03:05:04",{"path":755,"words":756,"published":757,"date":156},"\u002Fposts\u002F2026\u002F2026-03-28-团队项目协作规范随记",2419,"2026-03-29 05:33:50",{"path":759,"words":760,"published":761,"date":156},"\u002Fposts\u002F2026\u002F2026-03-29-oh-my-posh配置分享",104,"2026-03-29 16:34:43",{"path":763,"words":764,"published":765,"date":156},"\u002Fposts\u002F2026\u002F2026-06-13-从上下文工程到-agent-harness-engineering",8840,"2026-06-13 21:06:20",{"path":767,"words":768,"published":769,"date":156},"\u002Fposts\u002F2026\u002F2026-07-13-简谈前端基建质量标准与ai友好建设",3814,"2026-07-13 21:06:20",{"path":771,"words":772,"published":773,"date":156},"\u002Fposts\u002F2026\u002F2026-07-15-agentic-rag-系统实践",13357,"2026-07-15 21:06:20",{"path":775,"words":776,"published":777,"date":156},"\u002Fposts\u002F2026\u002F2026-07-18-简谈sdd规范驱动开发-copy",4476,"2026-07-18 11:06:20",{"path":779,"words":780,"published":781,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-个人neovim配置分享",366,"2026-07-22 13:46:50",{"path":783,"words":784,"published":785,"date":156},"\u002Fposts\u002F2026\u002F2026-07-20-关于技术写作-设计文档",6763,"2026-07-20 13:46:50",{"path":787,"words":788,"published":789,"date":156},"\u002Fposts\u002F2026\u002F2026-07-29-fastapi-工程实践随记",3417,"2026-07-29 04:58:34",{"path":791,"words":792,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-06-19-rfc-liskin_code_agent",3563,"2026-06-19 15:18:20",{"path":795,"words":796,"published":797,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-07-25-rfc-glushkov_ogas",13461,"2026-07-28 23:46:50",{"path":799,"words":800,"published":793,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002F2026-08-03-adr-ogas-arkhiv",2698,{"path":802,"words":803,"published":804,"date":156},"\u002Fposts\u002Frfc_agentic_project\u002Frag\u002F2026-08-12-arkhiv_rag-vol-1",4366,"2026-08-12 15:18:20",{"path":806,"words":807,"published":808,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-25-力扣百题速练javascripttypescriptvol-1",3108,"2025-12-25 13:57:08",{"path":810,"words":811,"published":812,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-26-力扣百题速练javascripttypescriptvol-2",3185,"2025-12-26 13:57:08",{"path":814,"words":815,"published":816,"date":156},"\u002Fposts\u002Fleetcode\u002F2025-12-28-力扣百题速练javascripttypescriptvol-3",2533,"2025-12-29 02:15:44",{"path":818,"words":819,"published":820,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-17-力扣百题速练javascripttypescriptvol-4",3024,"2026-01-17 22:53:01",{"path":822,"words":823,"published":824,"date":156},"\u002Fposts\u002Fleetcode\u002F2026-01-19-力扣百题速练javascripttypescriptvol-5",293,"2026-01-19 15:15:12",{"path":826,"words":827,"published":828,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算spark系统与scala语言",4320,"2026-07-06 14:10:49",{"path":830,"words":831,"published":832,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算分类与回归分析",2081,"2026-07-07 12:40:29",{"path":834,"words":835,"published":836,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数值优化方法",2182,"2026-07-07 13:50:29",{"path":838,"words":839,"published":840,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算数据降维",1583,"2026-07-07 21:50:29",{"path":842,"words":843,"published":844,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算聚类分析",1882,"2026-07-07 16:50:29",{"path":846,"words":847,"published":848,"date":156},"\u002Fposts\u002F分布式处理与计算\u002F分布式处理与计算随机模拟与统计推断",2433,"2026-07-06 22:40:29",{"path":850,"words":851,"published":852,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-基本图像",10011,"2026-06-14 20:18:20",{"path":854,"words":855,"published":856,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-14-数据可视化-概论",10030,"2026-06-14 15:18:20",{"path":858,"words":859,"published":860,"date":156},"\u002Fposts\u002F数据可视化\u002F2026-06-15-数据可视化-可视化库",2032,"2026-06-15 20:18:20",{"path":862,"words":863,"published":864,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-图",5451,"2025-04-15 20:48:06",{"path":866,"words":867,"published":868,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-树",4211,"2025-04-30 02:19:06",{"path":870,"words":871,"published":872,"date":156},"\u002Fposts\u002F数据结构\u002F2025-09-29-数据结构-队列",921,"2025-04-11 15:30:08",{"path":874,"words":875,"published":876,"date":156},"\u002Fposts\u002F数据结构\u002F关于数据结构的一些想法",456,"2025-04-04 19:13:49",{"path":878,"words":879,"published":880,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-栈",920,"2025-04-18 00:17:37",{"path":882,"words":883,"published":884,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-算法复杂度",2153,"2025-04-05 16:09:55",{"path":886,"words":887,"published":888,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表链表",4572,"2025-04-06 00:24:40",{"path":890,"words":891,"published":892,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-线性表顺序表",4191,"2025-04-05 22:09:59",{"path":894,"words":895,"published":896,"date":156},"\u002Fposts\u002F数据结构\u002F数据结构-绪论",2881,"2025-04-05 11:31:22",{"path":898,"words":899,"published":156,"date":900},"\u002Fposts\u002F杂记\u002F2023-12-26-2023年12月26日",7,"2023-12-26 23:51:33",{"path":902,"words":899,"published":156,"date":903},"\u002Fposts\u002F杂记\u002F2024-01-01-2024团建","2024-01-01 01:51:27",{"path":905,"words":581,"published":156,"date":906},"\u002Fposts\u002F杂记\u002F2024-01-09-随记","2024-01-09 20:50:35",{"path":908,"words":909,"published":156,"date":910},"\u002Fposts\u002F杂记\u002F2024-03-12-花名",5275,"2024-03-12 16:04:23",{"path":912,"words":913,"published":156,"date":914},"\u002Fposts\u002F杂记\u002F2024-04-15-逆模因",1353,"2024-04-15 00:26:16",{"path":916,"words":917,"published":156,"date":918},"\u002Fposts\u002F杂记\u002F2024-05-03-艺作",27,"2024-05-03 00:01:00",{"path":920,"words":921,"published":156,"date":922},"\u002Fposts\u002F杂记\u002F2024-05-21-关于博客",1720,"2024-02-21 23:21:11",{"path":924,"words":925,"published":156,"date":926},"\u002Fposts\u002F杂记\u002F2024-06-20-dnvrc维克多崔专访-2023",2036,"2024-06-20 00:28:39",{"path":928,"words":760,"published":156,"date":929},"\u002Fposts\u002F杂记\u002F2024-06-25-6月25日随记","2024-06-25 12:46:36",{"path":931,"words":932,"published":156,"date":933},"\u002Fposts\u002F杂记\u002F2024-06-25-歌名-想見星星",148,"2024-06-25 22:47:59",{"path":935,"words":936,"published":156,"date":937},"\u002Fposts\u002F杂记\u002F2024-07-11-桂花岗",6,"2024-07-11 00:28:17",{"path":939,"words":940,"published":156,"date":941},"\u002Fposts\u002F杂记\u002F2024-07-15-rolling-bocci",9,"2024-07-15 21:25:56",{"path":943,"words":944,"published":156,"date":945},"\u002Fposts\u002F杂记\u002F2024-07-22-七月九日",34,"2024-07-09 17:54:23",{"path":947,"words":948,"published":156,"date":949},"\u002Fposts\u002F杂记\u002F2024-07-22-六月随记",1052,"2024-07-22 01:03:19",{"path":951,"words":952,"published":156,"date":953},"\u002Fposts\u002F杂记\u002F2024-07-22-石菖蒲",41,"2024-07-10 01:26:05",{"path":955,"words":514,"published":156,"date":956},"\u002Fposts\u002F杂记\u002F2024-07-23-新书","2024-07-23 01:05:49",{"path":958,"words":959,"published":156,"date":960},"\u002Fposts\u002F杂记\u002F2024-07-29-年前",74,"2024-07-29 23:59:07",{"path":962,"words":963,"published":156,"date":964},"\u002Fposts\u002F杂记\u002F2024-07-30-周边",138,"2024-07-30 02:03:23",{"path":966,"words":967,"published":156,"date":968},"\u002Fposts\u002F杂记\u002F2024-07-31-2024-7-31日",185,"2024-07-31 01:21:52",{"path":970,"words":971,"published":156,"date":972},"\u002Fposts\u002F杂记\u002F2024-08-02-八月",1710,"2024-08-30 00:31:02",{"path":974,"words":975,"published":156,"date":976},"\u002Fposts\u002F杂记\u002F2024-09-01-九月",1484,"2024-09-26 16:30:15",{"path":978,"words":979,"published":156,"date":980},"\u002Fposts\u002F杂记\u002F2024-09-08-2024年9月8日",97,"2024-09-08 13:59:36",{"path":982,"words":514,"published":156,"date":983},"\u002Fposts\u002F杂记\u002F2024-09-19-博客站的一周年","2024-09-18 23:36:24",{"path":985,"words":986,"published":156,"date":987},"\u002Fposts\u002F杂记\u002F2024-10-03-十月",1028,"2024-10-31 23:54:27",{"path":989,"words":990,"published":156,"date":991},"\u002Fposts\u002F杂记\u002F2024-11-04-十一月",2134,"2024-11-30 00:04:39",{"path":993,"words":994,"published":156,"date":995},"\u002Fposts\u002F杂记\u002F2024-11-10-gzhu-site-193",80,"2024-11-10 19:19:12",{"path":997,"words":998,"published":156,"date":999},"\u002Fposts\u002F杂记\u002F2024-12-01-十二月",455,"2024-12-30 23:13:47",{"path":1001,"words":1002,"published":156,"date":1003},"\u002Fposts\u002F杂记\u002F2024-12-21-年末",23,"2024-12-21 23:21:49",{"path":1005,"words":522,"published":156,"date":1006},"\u002Fposts\u002F杂记\u002F2025-01-30-一月","2025-01-30 23:44:41",{"path":1008,"words":1009,"published":156,"date":1010},"\u002Fposts\u002F杂记\u002F2025-03-01-二月",224,"2025-02-28 00:11:08",{"path":1012,"words":1013,"published":156,"date":1014},"\u002Fposts\u002F杂记\u002F2025-03-01-博客杂谈",344,"2025-03-01 16:03:18",{"path":1016,"words":1017,"published":156,"date":1018},"\u002Fposts\u002F杂记\u002F2025-03-05-三月",2090,"2025-03-05 19:17:28",{"path":1020,"words":1021,"published":156,"date":1022},"\u002Fposts\u002F杂记\u002F2025-07-10-七月",361,"2025-07-10 22:04:32",{"path":1024,"words":1025,"published":156,"date":1026},"\u002Fposts\u002F杂记\u002F2025-09-21-九月",781,"2025-09-21 20:53:37",{"path":1028,"words":1029,"published":156,"date":1030},"\u002Fposts\u002F杂记\u002F2025-10-09-十月",591,"2025-10-09 00:35:07",{"path":1032,"words":1033,"published":156,"date":1034},"\u002Fposts\u002F杂记\u002Fcontrol",13,"2023-09-25 13:03:59",{"path":1036,"words":1037,"published":156,"date":1038},"\u002Fposts\u002F杂记\u002Fquadim四叉树图像处理",1094,"2023-10-21 11:27:06",{"path":1040,"words":1041,"published":156,"date":1042},"\u002Fposts\u002F杂记\u002Fsuccess",24,"2023-09-22 15:59:07",{"path":1044,"words":1045,"published":156,"date":1046},"\u002Fposts\u002F杂记\u002F三光年",295,"2023-11-18 04:18:40",{"path":1048,"words":1049,"published":156,"date":1050},"\u002Fposts\u002F杂记\u002F加密测试",961,"2023-11-21 14:24:01",{"path":1052,"words":1053,"published":156,"date":1054},"\u002Fposts\u002F杂记\u002F啊啊啊啊啊啊啊",54,"2023-09-20 17:29:33",{"path":1056,"words":1057,"published":156,"date":1058},"\u002Fposts\u002F杂记\u002F杂谈",124,"2023-09-25 23:11:32",{"path":1060,"words":1061,"published":156,"date":1062},"\u002Fposts\u002F杂记\u002F艹",25,"2023-10-21 17:40:43",{"path":1064,"words":1065,"published":1066,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习卷积神经网络",3168,"2026-06-07 11:23:08",{"path":1068,"words":1069,"published":1070,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习循环神经网络",2348,"2026-06-07 11:33:08",{"path":1072,"words":1073,"published":1074,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习改进学习方法",3360,"2026-06-07 10:13:08",{"path":1076,"words":1077,"published":1078,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习深度生成模型",2727,"2026-06-07 11:43:08",{"path":1080,"words":1081,"published":1082,"date":156},"\u002Fposts\u002F神经网络\u002F神经网络与深度学习神经网络基础",3205,"2026-06-07 10:03:08",{"id":1084,"title":1085,"abbrlink":1086,"body":1087,"category":40,"cover":156,"date":156,"description":1099,"extension":2229,"mathjax":2230,"meta":2231,"navigation":2234,"path":890,"published":892,"readingMinutes":534,"seo":2235,"stem":2236,"sticky":156,"swiper_index":156,"tags":2237,"updated":156,"words":891,"__hash__":2238},"posts\u002Fposts\u002F数据结构\u002F数据结构-线性表（顺序表）.md","数据结构-线性表（顺序表）","23014",{"type":1088,"value":1089,"toc":2197},"minimark",[1090,1093,1096,1100,1105,1110,1113,1116,1124,1130,1133,1136,1139,1144,1147,1150,1156,1159,1162,1166,1169,1191,1194,1197,1200,1203,1212,1215,1220,1224,1227,1230,1233,1238,1241,1252,1255,1258,1266,1269,1275,1278,1284,1287,1298,1307,1320,1326,1329,1332,1335,1341,1344,1350,1354,1357,1360,1363,1374,1377,1385,1388,1393,1398,1403,1408,1413,1418,1421,1427,1430,1433,1436,1439,1442,1447,1450,1456,1459,1468,1477,1483,1486,1489,1497,1500,1506,1520,1538,1573,1579,1585,1595,1620,1629,1638,1640,1642,1649,1690,1698,1725,1727,1729,1734,1810,1854,1860,1877,1892,1895,1898,1904,1909,1915,1918,1924,1927,1938,1944,1948,1955,1961,1964,1972,1978,1981,1989,1995,1998,2005,2011,2014,2022,2028,2031,2038,2044,2047,2054,2060,2063,2067,2075,2079,2155,2158,2161,2164,2167,2178,2181,2192],[1091,1092],"hr",{},[1094,1095,43],"h1",{"id":43},[1097,1098,1099],"p",{},"说起这个问题，我们一定不陌生。打开QQ或微信，我们可以看到好友列表，打开PTA，我们能看到题目列表，打开音乐软件，我们可以看见歌曲列表，线性表在我们的生活中无处不在。线性表是怎么呈现的呢？线性表把我们在生活中需要的信息，按照顺序进行排列，使得这些信息直观、有条理，如果是按照某种顺序排列的列表，我们可以做到信息的快速检索。",[1101,1102],"img",{"src":1103,"alt":1101,"style":1104},"https:\u002F\u002Fpic4.zhimg.com\u002F80\u002Fv2-7c32c9f0fe93841585644ed3fe78d057_1440w.webp","zoom:50%;",[1106,1107,1109],"h2",{"id":1108},"_1-线性表线性存储结构","1) 线性表（线性存储结构）",[1097,1111,1112],{},"线性表又称线性存储结构，是最简单的一种存储结构，专门用来存储逻辑关系为“一对一”的数据。",[1097,1114,1115],{},"在一个数据集中，如果每个数据的左侧都有且仅有一个数据和它有关系，数据的右侧也有且仅有一个数据和它有关系，那么这些数据之间就是“一对一“的逻辑关系。",[1097,1117,1118,1119,1123],{},"所谓线性表，是",[1120,1121,1122],"strong",{},"零个或多个数据元素的有限序列","，线性表的元素具有相同的特征，数据元素之间的关系是一对一的关系。",[1097,1125,1126],{},[1101,1127],{"alt":1128,"src":1129},"动图封面","https:\u002F\u002Fpica.zhimg.com\u002Fv2-1d4fbbfe837a10f526f03db2b9bcb51e_b.jpg",[1097,1131,1132],{},"如上图所示，在 {1,2,3,4,5} 数据集中，每个数据的左侧都有且仅有一个数据和它紧挨着（除 1 外），右侧也有且仅有一个数据和它紧挨着（除 5 外），这些数据之间就是“一对一“的关系。",[1097,1134,1135],{},"使用线性表存储具有“一对一“逻辑关系的数据，不仅可以将所有数据存储到内存中，还可以将“一对一”的逻辑关系也存储到内存中。",[1097,1137,1138],{},"线性表存储数据的方案可以这样来理解，先用一根线将所有数据按照先后次序“串”起来，如下图所示：",[1097,1140,1141],{},[1101,1142],{"alt":1128,"src":1143},"https:\u002F\u002Fpic1.zhimg.com\u002Fv2-fa84cb14e76e339984f024a79e3faf50_b.jpg",[1097,1145,1146],{},"数据和“一对一”的逻辑关系",[1097,1148,1149],{},"左侧是“串”起来的数据，右侧是空闲的物理空间。将这“一串儿”数据存放到物理空间中，有以下两种方法：",[1097,1151,1152],{},[1101,1153],{"alt":1154,"src":1155},"动图","https:\u002F\u002Fpic1.zhimg.com\u002Fv2-c83d6f36a89109312c6532bc67426d06_b.webp",[1097,1157,1158],{},"两种存储方式都可以将数据之间的关系存储起来，从线的一头开始捋，可以依次找到每个数据，且数据的前后位置没有发生改变。",[1097,1160,1161],{},"像上图这样，用一根线将具有“一对一”逻辑关系的数据存储起来，这样的存储方式就称为线性表或者线性存储结构。",[1163,1164,1165],"h3",{"id":1165},"顺序存储结构和链式存储结构",[1097,1167,1168],{},"从图 3 不难看出，线性表存储数据的实现方案有两种，分别是：",[1170,1171,1172,1183],"ol",{},[1173,1174,1175,1176,1182],"li",{},"像图 3a) 那样，不破坏数据的前后次序，将它们连续存储在内存空间中，这样的存储方案称为顺序存储结构（简称",[1177,1178,188],"a",{"href":1179,"rel":1180},"https:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fxiexuewu.github.io\u002Fview\u002F158.html",[1181],"nofollow","）；",[1173,1184,1185,1186,1190],{},"像图 3b) 那样，将所有数据分散存储在内存中，数据之间的逻辑关系全靠“一根线”维系，这样的存储方案称为链式存储结构（简称",[1177,1187,178],{"href":1188,"rel":1189},"https:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fxiexuewu.github.io\u002Fview\u002F160.html",[1181],"）。",[1097,1192,1193],{},"也就是说，使用线性表存储数据，有两种真正可以落地的存储方案，分别是顺序表和链表。",[1163,1195,1196],{"id":1196},"前驱和后继",[1097,1198,1199],{},"在具有“一对一“逻辑关系的数据集中，每个个体习惯称为数据元素（简称元素）。例如，图 1 显示的这组数据集中，一共有 5 个元素，分别是 1、2、3、4 和 5。",[1097,1201,1202],{},"此外，很多教程中喜欢用前驱和后继来描述元素之间的前后次序：",[1204,1205,1206,1209],"ul",{},[1173,1207,1208],{},"某一元素的左侧相邻元素称为该元素的“直接前驱”，此元素左侧的所有元素统称为该元素的“前驱元素”；",[1173,1210,1211],{},"某一元素的右侧相邻元素称为该元素的“直接后继”，此元素右侧的所有元素统称为该元素的“后继元素”；",[1097,1213,1214],{},"以图 1 数据中的元素 3 来说，它的直接前驱是 2 ，此元素的前驱元素有 2 个，分别是 1 和 2；同理，此元素的直接后继是 4 ，后继元素也有 2 个，分别是 4 和 5。",[1097,1216,1217],{},[1101,1218],{"alt":1128,"src":1219},"https:\u002F\u002Fpic2.zhimg.com\u002Fv2-06d19e0cf407ab715278064926dbdfa9_b.jpg",[1106,1221,1223],{"id":1222},"_2-顺序表顺序存储结构","2) 顺序表（顺序存储结构）",[1097,1225,1226],{},"顺序表又称顺序存储结构，是线性表的一种，专门存储逻辑关系为“一对一”的数据。",[1097,1228,1229],{},"顺序表存储数据的具体实现方案是：将数据全部存储到一整块内存空间中，数据元素之间按照次序挨个存放。",[1097,1231,1232],{},"举个简单的例子，将 {1,2,3,4,5} 这些数据使用顺序表存储，数据最终的存储状态如下图所示：",[1097,1234,1235],{},[1101,1236],{"alt":1128,"src":1237},"https:\u002F\u002Fpic2.zhimg.com\u002Fv2-0b61ec650d70af3469531945a0a0bc11_b.jpg",[1163,1239,1240],{"id":1240},"线性表的抽象数据结构",[1242,1243,1249],"pre",{"className":1244,"code":1246,"language":1247,"meta":1248},[1245],"language-c++","ADT List\n{\n    Data:\n        D = {ai | 1 ≤ i ≤ n, n ≥ 0, ai 为 ElemType 类型}\n    Relation：\n        R = { \u003Cai,ai+1> | ai,ai+1 ∈ D, i = 1, i ∈ (0,n)}\n    Operation:\n        InitList(&L);    \u002F\u002F初始化，建立一个空的线性表L\n        MakeList(&L);    \u002F\u002F建立线性表，向表中存入数据\n        ListEmpty(*L);    \u002F\u002F空表判断，是则返回true,否则返回false\n        DestroyList(&L);    \u002F\u002F清除操作，清空线性表的元素\n        GetElem(L,i,&e);    \u002F\u002F获取线性表的元素，将线性表L的第i个元素的值返回给e\n        LocateElem(L,e);    \u002F\u002F按值查找元素，在线性表L中查找与e元素相等的元素，查找成功返回对应的序号，查找失败则返回0\n        ListInsert(&L,i,e);    \u002F\u002F插入操作，在线性表L的第i个位置插入元素e\n        ListDelete(&L,i,&e);    \u002F\u002F删除操作，删除线性表L中的第i个位置的元素，并将其用e返回\n        ListLength(L);    \u002F\u002F计算表长，返回线性表L的元素个数\n        DispList(L);    \u002F\u002F输出线性表，当线性表不为空表时，按顺序输出表中的每一个元素\n}\n","c++","",[1250,1251,1246],"code",{"__ignoreMap":1248},[1163,1253,1254],{"id":1254},"顺序表的建立",[1097,1256,1257],{},"使用顺序表存储数据，除了存储数据本身的值以外，通常还会记录以下两样数据：",[1204,1259,1260,1263],{},[1173,1261,1262],{},"顺序表的最大存储容量：顺序表最多可以存储的数据个数；",[1173,1264,1265],{},"顺序表的长度：当前顺序表中存储的数据个数。",[1097,1267,1268],{},"C 语言中，可以定义一个结构体来表示顺序表：",[1242,1270,1273],{"className":1271,"code":1272,"language":1247,"meta":1248},[1245],"typedef struct{\n    int * head; \u002F\u002F定义一个名为head的长度不确定的数组，也叫“动态数组”\n    int length; \u002F\u002F记录当前顺序表的长度\n    int size; \u002F\u002F记录顺序表的存储容量\n}Table;\n",[1250,1274,1272],{"__ignoreMap":1248},[1097,1276,1277],{},"尝试建立一个顺序表，例如：",[1242,1279,1282],{"className":1280,"code":1281,"language":1247,"meta":1248},[1245],"#define Size 5 \u002F\u002F对Size进行宏定义，表示顺序表的最大容量\nvoid initTable(Table * t) {\n    \u002F\u002F构造一个空的顺序表，动态申请存储空间\n    t->head = (int*)malloc(Size * sizeof(int)); \u002F\u002F申请内存空间\n    \u002F\u002F如果申请失败，作出提示并直接退出程序\n    if (!t->head)\n    {\n        printf(\"初始化失败\");\n        exit(0);\n    }\n    \u002F\u002F空表的长度初始化为0\n    t->length = 0;\n    \u002F\u002F空表的初始存储空间为Size\n    t->size = Size;\n}\n",[1250,1283,1281],{"__ignoreMap":1248},[1097,1285,1286],{},"如上所示，整个建立顺序表的过程都封装在一个函数中，建好的顺序表可以存储 5 个逻辑关系为“一对一”的整数。",[1097,1288,1289,1290,1293,1294,1297],{},"在顺序表的实现中，",[1250,1291,1292],{},"t->head"," 是一个",[1120,1295,1296],{},"指向动态数组基地址的指针","，其核心作用是为顺序表提供存储数据的连续内存空间。以下是具体解析：",[1163,1299,1301],{"id":1300},"_1-t-head-的定义与作用",[1120,1302,1303,1304,1306],{},"1. ",[1250,1305,1292],{}," 的定义与作用",[1097,1308,1309,1310,1313,1314,1317,1319],{},"• ",[1120,1311,1312],{},"定义","：",[1315,1316],"br",{},[1250,1318,1292],{}," 是顺序表结构体中的一个成员变量，通常声明为动态数组的起始地址指针。例如在 C 语言中，顺序表的结构体定义如下：",[1242,1321,1324],{"className":1322,"code":1323,"language":1247,"meta":1248},[1245],"typedef struct {\n    int *head;  \u002F\u002F 动态数组基地址\n    int length; \u002F\u002F 当前元素个数\n    int size;   \u002F\u002F 总存储容量\n} Table;\n",[1250,1325,1323],{"__ignoreMap":1248},[1163,1327,1328],{"id":1328},"顺序表的使用",[1097,1330,1331],{},"通过调用 initTable() 函数，就可以成功地创建一个顺序表，还可以往顺序表中存储一些元素。",[1097,1333,1334],{},"例如，将 {1,2,3,4,5} 存储到顺序表中，实现代码如下：",[1242,1336,1339],{"className":1337,"code":1338,"language":1247,"meta":1248},[1245],"#include \u003Cstdio.h>\n#include \u003Cstdlib.h>\n#define Size 5 \u002F\u002F对Size进行宏定义，表示顺序表的最大容量\ntypedef struct{\n    int* head;\n    int length;\n    int size;\n}Table;\n\n\nvoid initTable(Table * t) {\n    \u002F\u002F构造一个空的顺序表，动态申请存储空间\n    t->head = (int*)malloc(Size * sizeof(int));\n    \u002F\u002F如果申请失败，作出提示并直接退出程序\n    if (!t->head) \u002F\u002F无头（申请失败）\n    {\n        printf(\"初始化失败\");\n        exit(0);\n    }\n    \u002F\u002F空表的长度初始化为0\n    t->length = 0; \u002F\u002Ft->length：当前元素个数\n    \u002F\u002F空表的初始存储空间为Size\n    t->size = Size; \u002F\u002Ft->size：总存储容量\n}\n\u002F\u002F输出顺序表中元素的函数\n\n\nvoid displayTable(Table t) {\n    int i;\n    for (i = 0; i \u003C t.length; i++) {\n        printf(\"%d \", t.head[i]);\n    }\n    printf(\"\\n\");\n}\n\n\nint main() {\n    int i;\n    Table t = { NULL,0,0 };\n    initTable(&t);\n    \u002F\u002F向顺序表中添加{1,2,3,4,5}\n    for (i = 1; i \u003C= Size; i++) {\n        t.head[i - 1] = i;\n        t.length++;\n    }\n    printf(\"顺序表中存储的元素分别是：\\n\");\n    displayTable(t);\n    free(t.head);\u002F\u002F释放申请的堆内存\n    return 0;\n}\n",[1250,1340,1338],{"__ignoreMap":1248},[1097,1342,1343],{},"程序运行结果如下：",[1345,1346,1347],"blockquote",{},[1097,1348,1349],{},"顺序表中存储的元素分别是： 1 2 3 4 5",[1106,1351,1353],{"id":1352},"_3-顺序表的基本操作","3) 顺序表的基本操作",[1097,1355,1356],{},"我们学习了顺序表及初始化的过程，本节学习有关顺序表的一些基本操作，以及如何使用 C 语言实现它们。",[1163,1358,1359],{"id":1359},"顺序表插入元素",[1097,1361,1362],{},"向已有顺序表中插入数据元素，根据插入位置的不同，可分为以下 3 种情况：",[1170,1364,1365,1368,1371],{},[1173,1366,1367],{},"插入到顺序表的表头；",[1173,1369,1370],{},"在表的中间位置插入元素；",[1173,1372,1373],{},"尾随顺序表中已有元素，作为顺序表中的最后一个元素；",[1097,1375,1376],{},"虽然数据元素插入顺序表中的位置有所不同，但是都使用的是同一种方式去解决，即：通过遍历，找到数据元素要插入的位置，然后做如下两步工作：",[1204,1378,1379,1382],{},[1173,1380,1381],{},"将要插入位置元素以及后续的元素整体向后移动一个位置；",[1173,1383,1384],{},"将元素放到腾出来的位置上；",[1097,1386,1387],{},"例如，在 {1,2,3,4,5} 的第 3 个位置上插入元素 6，实现过程如下：",[1204,1389,1390],{},[1173,1391,1392],{},"遍历至顺序表存储第 3 个数据元素的位置",[1097,1394,1395],{},[1101,1396],{"alt":1128,"src":1397},"https:\u002F\u002Fpic3.zhimg.com\u002Fv2-9ce044ee30b5c641efb5cfe4753b1ff2_b.jpg",[1204,1399,1400],{},[1173,1401,1402],{},"将元素 3、4 和 5 整体向后移动一个位置",[1097,1404,1405],{},[1101,1406],{"alt":1128,"src":1407},"https:\u002F\u002Fpic1.zhimg.com\u002Fv2-926c02eec07c5de69d2a9c29149f76bc_b.jpg",[1204,1409,1410],{},[1173,1411,1412],{},"将新元素 6 放入腾出的位置",[1097,1414,1415],{},[1101,1416],{"alt":1128,"src":1417},"https:\u002F\u002Fpic3.zhimg.com\u002Fv2-d5868803c7ed313babcec6d6c5a29cf0_b.jpg",[1097,1419,1420],{},"因此，顺序表插入数据元素的 C 语言实现代码如下：",[1242,1422,1425],{"className":1423,"code":1424,"language":1247,"meta":1248},[1245],"\u002F\u002F插入函数，其中，elem为插入的元素，add为插入到顺序表的位置\nvoid insertTable(Table* t, int elem, int add)\n{\n    int i;\n\n\n    \u002F\u002F如果插入元素位置(add)比整张表的长度+1(t->length + 1)还大（如果相等，是尾随的情况），或者插入的位置本身不存在，程序作为提示并自动退出\n    if (add > t->length + 1 || add \u003C 1) {\n        printf(\"插入位置有问题\\n\");\n        return;\n    }\n\n\n    \u002F\u002F做插入操作时，首先需要看顺序表是否有多余的存储空间提供给插入的元素，有就是(t->length \u003C t->size)，如果没有就是(t->length == t->size)，需要申请\n    if (t->length == t->size) {\n        t->head = (int*)realloc(t->head, (t->size + 1) * sizeof(int));\n        \u002F\u002F重新分配内存，动态数组额外申请更多物理空间\n        if (!t->head) {\n            printf(\"存储分配失败\\n\");\n            return;\n        }\n        t->size += 1;\n    }\n\n\n    \u002F\u002F插入操作，需要将自插入位置之后的所有元素(从t->length - 1倒数到add - 1)全部后移一位\n    for (i = t->length - 1; i >= add - 1; i--) {\n        t->head[i + 1] = t->head[i];\n    }\n\n    \u002F\u002F后移完成后，直接插入元素\n    t->head[add - 1] = elem;\n    t->length++;\n}\n",[1250,1426,1424],{"__ignoreMap":1248},[1097,1428,1429],{},"注意，动态数组额外申请更多物理空间使用的是 realloc 函数。此外在实现元素整体后移的过程中，目标位置其实是有数据的，还是 3，只是下一步新插入元素时会把旧元素直接覆盖。",[1163,1431,1432],{"id":1432},"顺序表删除元素",[1097,1434,1435],{},"从顺序表中删除指定元素，实现起来非常简单，只需找到目标元素，并将其后续所有元素整体前移 1 个位置即可。",[1097,1437,1438],{},"后续元素整体前移一个位置，会直接将目标元素删除，可间接实现删除元素的目的。",[1097,1440,1441],{},"例如，从 {1,2,3,4,5} 中删除元素 3 的过程如图 4 所示：",[1097,1443,1444],{},[1101,1445],{"alt":1128,"src":1446},"https:\u002F\u002Fpic3.zhimg.com\u002Fv2-dfb4a1ff7c8dc898a0b7fef73f637262_b.jpg",[1097,1448,1449],{},"因此，顺序表删除元素的 C 语言实现代码为：",[1242,1451,1454],{"className":1452,"code":1453,"language":1247,"meta":1248},[1245],"void delTable(Table* t, int add) {\n    int i;\n    if (add > t->length || add \u003C 1) {  \u002F\u002F删除元素位置大于表长或小于0\n        printf(\"被删除元素的位置有误\\n\");\n        return;\n    }\n    \u002F\u002F删除操作\n    for (i = add; i \u003C t->length; i++) {\n        t->head[i - 1] = t->head[i];\n    }\n    t->length--;\u002F\u002F表长减短\n}\n",[1250,1455,1453],{"__ignoreMap":1248},[1163,1457,1458],{"id":1458},"顺序表查找元素",[1097,1460,1461,1462,1467],{},"顺序表中查找目标元素，可以使用多种查找算法实现，比如说",[1177,1463,1466],{"href":1464,"rel":1465},"https:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fxiexuewu.github.io\u002Fview\u002F55.html",[1181],"二分查找","算法、插值查找算法等。",[1097,1469,1470,1471,1476],{},"这里，我们选择",[1177,1472,1475],{"href":1473,"rel":1474},"https:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fxiexuewu.github.io\u002Fview\u002F54.html",[1181],"顺序查找","算法，具体实现代码为：",[1242,1478,1481],{"className":1479,"code":1480,"language":1247,"meta":1248},[1245],"\u002F\u002F查找函数，其中，elem表示要查找的数据元素的值\nint selectTable(table t,int elem){\n    for (int i=0; i\u003Ct.length; i++) {\n        if (t.head[i]==elem) {\n            return i+1;\n        }\n    }\n    return -1;\u002F\u002F如果查找失败，返回-1\n}\n",[1250,1482,1480],{"__ignoreMap":1248},[1163,1484,1485],{"id":1485},"顺序表更改元素",[1097,1487,1488],{},"顺序表更改元素的实现过程是：",[1170,1490,1491,1494],{},[1173,1492,1493],{},"找到目标元素；",[1173,1495,1496],{},"直接修改该元素的值；",[1097,1498,1499],{},"顺序表更改元素的 C 语言实现代码为：",[1242,1501,1504],{"className":1502,"code":1503,"language":1247,"meta":1248},[1245],"void amendTable(Table* t, int elem, int newElem) {\n    int add = selectTable(*t, elem);\n    if (add == -1) {\n        printf(\"顺序表中没有找到目标元素\\n\");\n        return;\n    }\n    t->head[add - 1] = newElem;\n}\n",[1250,1505,1503],{"__ignoreMap":1248},[1163,1507,1509,1510,1512,1513,1516,1517],{"id":1508},"关于-t-headt-length-和-t-size","关于 ",[1250,1511,1292],{},",",[1250,1514,1515],{},"t->length ","和 ",[1250,1518,1519],{},"t->size",[1097,1521,1309,1522,1313,1525,1527,1529,1530,1533,1534,1537],{},[1120,1523,1524],{},"物理存储管理",[1315,1526],{},[1250,1528,1292],{}," 指向通过 ",[1250,1531,1532],{},"malloc"," 或 ",[1250,1535,1536],{},"realloc"," 动态申请的内存块的首地址。顺序表中的所有元素按逻辑顺序连续存储在这段内存中。",[1097,1539,1309,1540,1313,1543,1545,1546,1548,1549,1551,1552,1313,1555,1558,1559,1551,1561,1564,1565,1568,1569,1572],{},[1120,1541,1542],{},"操作接口",[1315,1544],{},"\n通过 ",[1250,1547,1292],{}," 可直接访问顺序表的元素，例如：",[1315,1550],{},"\n• ",[1120,1553,1554],{},"插入",[1250,1556,1557],{},"t->head[add-1] = elem"," 将元素写入指定位置。",[1315,1560],{},[1120,1562,1563],{},"遍历","：通过 ",[1250,1566,1567],{},"t->head[i]"," 访问第 ",[1250,1570,1571],{},"i"," 个元素。",[1097,1574,1575,1576,1578],{},"顺序表初始化时，",[1250,1577,1292],{}," 被赋予动态分配的内存地址。例如：",[1242,1580,1583],{"className":1581,"code":1582,"language":1247,"meta":1248},[1245],"void initTable(Table *t) {\n    t->head = (int*)malloc(Size * sizeof(int));  \u002F\u002F 申请初始内存\n    t->length = 0;\n    t->size = Size;\n}\n",[1250,1584,1582],{"__ignoreMap":1248},[1097,1586,1587,1588,1590,1591,1594],{},"若内存分配失败，",[1250,1589,1292],{}," 会指向 ",[1250,1592,1593],{},"NULL","，此时需进行错误处理。",[1097,1596,1597,1598,1600,1601,1551,1603,1606,1607,1610,1611,1551,1613,1616,1617,1619],{},"所有对顺序表元素的增删查改均通过 ",[1250,1599,1292],{}," 实现：",[1315,1602],{},[1120,1604,1605],{},"插入元素","：将后续元素右移后，直接通过 ",[1250,1608,1609],{},"t->head[add-1]"," 写入新值。",[1315,1612],{},[1120,1614,1615],{},"删除元素","：左移覆盖目标元素后，通过 ",[1250,1618,1292],{}," 重新定位后续元素。",[1097,1621,1622,1624,1625,1628],{},[1250,1623,1292],{}," 是顺序表实现中",[1120,1626,1627],{},"动态内存管理的核心","，它指向存储数据的连续内存块，并通过指针操作支持元素的增删查改。",[1097,1630,1289,1631,1634,1635,1637],{},[1250,1632,1633],{},"t->length","和",[1250,1636,1519],{},"是两个关键字段，它们的含义及设计逻辑如下：",[1091,1639],{},[1091,1641],{},[1097,1643,1644],{},[1120,1645,1303,1646,1648],{},[1250,1647,1633],{},"：当前元素个数",[1097,1650,1309,1651,1653,1654,1657,1658,1661,1662,1665,1666,1669,1670,1673,1674,1677,1678,1681,1682,1685,1686,1689],{},[1120,1652,1312],{},"：表示顺序表中",[1120,1655,1656],{},"实际存储的有效元素数量","，即当前表内数据的逻辑长度。\n• ",[1120,1659,1660],{},"作用","：\n• 控制插入\u002F删除操作的合法性（例如插入位置不能超过",[1250,1663,1664],{},"length+1","，删除位置不能超过",[1250,1667,1668],{},"length","）。\n• 遍历时确定元素范围（从下标",[1250,1671,1672],{},"0","到",[1250,1675,1676],{},"length-1","）。\n• ",[1120,1679,1680],{},"示例","：若顺序表存储",[1250,1683,1684],{},"{1,2,3}","，则",[1250,1687,1688],{},"length=3","。",[1097,1691,1692],{},[1120,1693,1694,1695,1697],{},"2. ",[1250,1696,1519],{},"：总存储容量",[1097,1699,1309,1700,1702,1703,1706,1707,1709,1710,1713,1714,1716,1717,1720,1721,1724],{},[1120,1701,1312],{},"：表示顺序表",[1120,1704,1705],{},"已申请的内存空间能容纳的最大元素数量","，即物理存储容量。\n• ",[1120,1708,1660],{},"：\n• 判断是否需要扩容（当",[1250,1711,1712],{},"length == size","时，表已满需扩展内存）。\n• 动态调整内存时记录当前分配的空间上限。\n• ",[1120,1715,1680],{},"：若初始分配容量为",[1250,1718,1719],{},"size=5","，插入5个元素后",[1250,1722,1723],{},"length=5","，此时需扩容才能继续插入。",[1091,1726],{},[1091,1728],{},[1097,1730,1731],{},[1120,1732,1733],{},"3. 两者的区别与联系",[1735,1736,1737,1764],"table",{},[1738,1739,1740],"thead",{},[1741,1742,1743,1749,1754,1759],"tr",{},[1744,1745,1746],"th",{},[1120,1747,1748],{},"字段",[1744,1750,1751],{},[1120,1752,1753],{},"意义",[1744,1755,1756],{},[1120,1757,1758],{},"操作触发条件",[1744,1760,1761],{},[1120,1762,1763],{},"命名逻辑",[1765,1766,1767,1789],"tbody",{},[1741,1768,1769,1774,1777,1783],{},[1770,1771,1772],"td",{},[1250,1773,1668],{},[1770,1775,1776],{},"实际元素个数（动态变化）",[1770,1778,1779,1780],{},"插入时位置需满足",[1250,1781,1782],{},"1 ≤ add ≤ length+1",[1770,1784,1785,1786],{},"直观体现“逻辑长度”，类似数组的",[1250,1787,1788],{},"size()",[1741,1790,1791,1796,1799,1804],{},[1770,1792,1793],{},[1250,1794,1795],{},"size",[1770,1797,1798],{},"最大容量（静态\u002F动态）",[1770,1800,1801,1802],{},"扩容条件为",[1250,1803,1712],{},[1770,1805,1806,1807],{},"体现“物理容量上限”，类似容器的",[1250,1808,1809],{},"capacity()",[1170,1811,1812,1824,1836],{},[1173,1813,1814,1817,1818,1820,1821,1823],{},[1120,1815,1816],{},"逻辑与物理分离","：\n• ",[1250,1819,1668],{},"关注数据逻辑层面的使用情况，",[1250,1822,1795],{},"关注物理内存的管理，两者分离便于维护动态内存。",[1173,1825,1826,1829,1830,1832,1833,1835],{},[1120,1827,1828],{},"操作安全性","：\n• 通过",[1250,1831,1668],{},"限制插入\u002F删除位置，避免越界访问；通过",[1250,1834,1795],{},"判断内存是否耗尽，防止溢出。",[1173,1837,1838,1841,1842,1844,1845,1847,1848,1850,1851,1853],{},[1120,1839,1840],{},"动态扩容机制","：\n• 当",[1250,1843,1668],{},"达到",[1250,1846,1795],{},"时，触发",[1250,1849,1536],{},"扩展内存（例如每次扩容固定步长或按倍数增长），保证数据连续性。",[1315,1852],{},"插入函数中：",[1242,1855,1858],{"className":1856,"code":1857,"language":1247,"meta":1248},[1245],"if (add > t->length + 1 || add \u003C 1) {\n    printf(\"插入位置有问题\\n\");\n    return;\n}\nif (t->length == t->size) {\n    t->head = (int*)realloc(t->head, (t->size + 1) * sizeof(int));\n    \u002F\u002F 扩容逻辑...\n}\n",[1250,1859,1857],{"__ignoreMap":1248},[1097,1861,1309,1862,1867,1868,1870,1871,1876],{},[1120,1863,1864],{},[1250,1865,1866],{},"add > t->length + 1","：确保插入位置不超过逻辑长度的下一个合法位置（如",[1250,1869,1688],{},"时，允许插入到第4位，但不可到第5位）。\n• ",[1120,1872,1873],{},[1250,1874,1875],{},"t->length == t->size","：触发扩容的条件，保证物理空间始终足够容纳逻辑元素。",[1097,1878,1879,1634,1881,1883,1884,1887,1888,1891],{},[1250,1880,1633],{},[1250,1882,1519],{},"是顺序表实现中",[1120,1885,1886],{},"动态内存管理","与",[1120,1889,1890],{},"逻辑操作控制","的核心字段。通过两者的协同，既能高效利用内存，又能确保数据操作的合法性。",[1106,1893,1894],{"id":1894},"其他操作的实现",[1163,1896,1897],{"id":1897},"逆序",[1242,1899,1902],{"className":1900,"code":1901,"language":1247,"meta":1248},[1245],"void reverseTable(Table* t) {\n    if (t->length \u003C= 1) return; \u002F\u002F 空表或单元素表无需处理\n\n    for (int i = 0; i \u003C t->length \u002F 2; i++) {\n        int temp = t->head[i];\n        t->head[i] = t->head[t->length - 1 - i];\n        t->head[t->length - 1 - i] = temp;\n    }\n}\n",[1250,1903,1901],{"__ignoreMap":1248},[1163,1905,1907],{"id":1906},"输出表长",[1120,1908,1906],{},[1242,1910,1913],{"className":1911,"code":1912,"language":1247,"meta":1248},[1245],"int ListLength(Table* t) {\n    return L->length; \u002F\u002F 直接返回顺序表的当前长度\n}\n",[1250,1914,1912],{"__ignoreMap":1248},[1163,1916,1917],{"id":1917},"删除全表",[1242,1919,1922],{"className":1920,"code":1921,"language":1247,"meta":1248},[1245],"void SeqListDestory(Table* t) {\n    assert(t);  \u002F\u002F 确保传入的指针非空\n    free(t->head);  \u002F\u002F 释放动态数组内存\n    t->head = NULL;  \u002F\u002F 指针置空\n    t->size = 0;  \u002F\u002F 容量归零\n    t->length = 0;  \u002F\u002F 元素个数归零\n}\n",[1250,1923,1921],{"__ignoreMap":1248},[1106,1925,1926],{"id":1926},"完整代码实现",[1097,1928,1929,1930,1933,1934,1937],{},"以下是一个完整的顺序表操作示例代码，包含",[1120,1931,1932],{},"初始化、插入、删除、查找、修改、逆序、销毁","等操作，并在",[1250,1935,1936],{},"main","函数中展示了具体调用逻辑：",[1242,1939,1942],{"className":1940,"code":1941,"language":1247,"meta":1248},[1245],"#include \u003Cstdio.h>\n#include \u003Cstdlib.h>\n#include \u003Cassert.h>\n#define INIT_SIZE 5  \u002F\u002F 初始容量\n\ntypedef struct {\n    int* head;    \u002F\u002F 动态数组基地址\n    int length;   \u002F\u002F 当前元素个数\n    int size;     \u002F\u002F 总存储容量\n} Table;\n\n\u002F\u002F 初始化顺序表\nvoid initTable(Table* t) {\n    t->head = (int*)malloc(INIT_SIZE * sizeof(int));\n    if (!t->head) {\n        printf(\"内存分配失败\\n\");\n        exit(EXIT_FAILURE);\n    }\n    t->length = 0;\n    t->size = INIT_SIZE;\n}\n\n\u002F\u002F 插入元素（位置从1开始）\nvoid insertTable(Table* t, int elem, int pos) {\n    if (pos \u003C 1 || pos > t->length + 1) {\n        printf(\"非法插入位置: %d\\n\", pos);\n        return;\n    }\n\n    \u002F\u002F 容量检查与扩容\n    if (t->length == t->size) {\n        int new_size = t->size * 2;  \u002F\u002F 容量翻倍\n        int* new_head = (int*)realloc(t->head, new_size * sizeof(int));\n        if (!new_head) {\n            printf(\"扩容失败\\n\");\n            return;\n        }\n        t->head = new_head;\n        t->size = new_size;\n        printf(\"已扩容至 %d\\n\", new_size);\n    }\n\n    \u002F\u002F 元素后移\n    for (int i = t->length; i >= pos; i--) {\n        t->head[i] = t->head[i - 1];\n    }\n\n    t->head[pos - 1] = elem;\n    t->length++;\n}\n\n\u002F\u002F 删除元素（位置从1开始）\nvoid delTable(Table* t, int pos) {\n    if (pos \u003C 1 || pos > t->length) {\n        printf(\"非法删除位置: %d\\n\", pos);\n        return;\n    }\n\n    \u002F\u002F 元素前移覆盖\n    for (int i = pos; i \u003C t->length; i++) {\n        t->head[i - 1] = t->head[i];\n    }\n    t->length--;\n}\n\n\u002F\u002F 查找元素（返回位置，从1开始）\nint selectTable(Table* t, int elem) {\n    for (int i = 0; i \u003C t->length; i++) {\n        if (t->head[i] == elem) {\n            return i + 1;\u002F\u002F 返回元素位置\n        }\n    }\n    return -1;  \u002F\u002F 未找到\n}\n\n\u002F\u002F 修改元素值\nvoid amendTable(Table* t, int old_elem, int new_elem) {\n    int pos = selectTable(t, old_elem); \u002F\u002F 查找元素\n    if (pos == -1) {\n        printf(\"元素 %d 不存在\\n\", old_elem);\n        return;\n    }\n    t->head[pos - 1] = new_elem;\n}\n\n\u002F\u002F 逆序顺序表\nvoid reverseTable(Table* t) {\n    for (int i = 0; i \u003C t->length \u002F 2; i++) {\n        int temp = t->head[i];\n        t->head[i] = t->head[t->length - 1 - i];\n        t->head[t->length - 1 - i] = temp;\n    }\n}\n\n\u002F\u002F 销毁顺序表\nvoid destroyTable(Table* t) {\n    free(t->head);\n    t->head = NULL;\n    t->length = 0;\n    t->size = 0;\n}\n\n\u002F\u002F 打印顺序表\nvoid displayTable(Table* t) {\n    printf(\"[当前表长: %d, 总容量: %d]\\n\", t->length, t->size);\n    for (int i = 0; i \u003C t->length; i++) {\n        printf(\"%d \", t->head[i]);\n    }\n    printf(\"\\n\\n\");\n}\n\nint main() {\n    Table my_table; \u002F\u002F声明一个名为 my_table 的变量，其类型为 Table 结构体\n\n    \u002F\u002F 1. 初始化\n    initTable(&my_table);\n    \u002F\u002F&my_table的作用是将结构体的地址传递给函数，使函数能通过指针直接修改原始变量\n    printf(\"=== 初始化顺序表 ===\\n\");\n    displayTable(&my_table);\n\n    \u002F\u002F 2. 插入初始元素\n    for (int i = 1; i \u003C= 5; i++) {\n        insertTable(&my_table, i, i);\n    }\n    printf(\"=== 插入5个元素 ===\\n\");\n    displayTable(&my_table);\n\n    \u002F\u002F 3. 测试扩容插入\n    insertTable(&my_table, 6, 3);  \u002F\u002F 在第3位插入6\n    printf(\"=== 插入第6个元素触发扩容 ===\\n\");\n    displayTable(&my_table);\n\n    \u002F\u002F 4. 删除元素\n    delTable(&my_table, 2);  \u002F\u002F 删除第2个元素\n    printf(\"=== 删除第2个元素 ===\\n\");\n    displayTable(&my_table);\n\n    \u002F\u002F 5. 查找元素\n    int target = 6;\n    int pos = selectTable(&my_table, target);\n    printf(\"=== 查找元素 %d ===\\n\", target);\n    if (pos != -1) {\n        printf(\"元素 %d 位于第 %d 位\\n\", target, pos);\n    } else {\n        printf(\"元素不存在\\n\");\n    }\n\n    \u002F\u002F 6. 修改元素\n    amendTable(&my_table, 6, 66);\n    printf(\"=== 修改元素 6 → 66 ===\\n\");\n    displayTable(&my_table);\n\n    \u002F\u002F 7. 逆序操作\n    reverseTable(&my_table);\n    printf(\"=== 逆序顺序表 ===\\n\");\n    displayTable(&my_table);\n\n    \u002F\u002F 8. 销毁顺序表\n    destroyTable(&my_table);\n    printf(\"=== 销毁后的状态 ===\\n\");\n    printf(\"指针状态: %s\\n\", (my_table.head == NULL) ? \"已释放\" : \"未释放\");\n\n    return 0;\n}\n",[1250,1943,1941],{"__ignoreMap":1248},[1163,1945,1947],{"id":1946},"关键调用逻辑说明","关键调用逻辑说明：",[1170,1949,1950],{},[1173,1951,1952],{},[1120,1953,1954],{},"初始化顺序表",[1242,1956,1959],{"className":1957,"code":1958,"language":1247,"meta":1248},[1245],"initTable(&my_table);\n",[1250,1960,1958],{"__ignoreMap":1248},[1097,1962,1963],{},"• 创建空表，初始容量为5\n• 时间复杂度：O(1)",[1170,1965,1967],{"start":1966},2,[1173,1968,1969],{},[1120,1970,1971],{},"批量插入元素",[1242,1973,1976],{"className":1974,"code":1975,"language":1247,"meta":1248},[1245],"for (int i = 1; i \u003C= 5; i++) {\n    insertTable(&my_table, i, i);\n}\n",[1250,1977,1975],{"__ignoreMap":1248},[1097,1979,1980],{},"• 插入5个元素填满初始容量\n• 时间复杂度：O(n)",[1170,1982,1984],{"start":1983},3,[1173,1985,1986],{},[1120,1987,1988],{},"触发扩容插入",[1242,1990,1993],{"className":1991,"code":1992,"language":1247,"meta":1248},[1245],"insertTable(&my_table, 6, 3);\n",[1250,1994,1992],{"__ignoreMap":1248},[1097,1996,1997],{},"• 当插入第6个元素时触发动态扩容（容量翻倍为10）\n• 时间复杂度：O(n)",[1170,1999,2001],{"start":2000},4,[1173,2002,2003],{},[1120,2004,1615],{},[1242,2006,2009],{"className":2007,"code":2008,"language":1247,"meta":1248},[1245],"delTable(&my_table, 2);\n",[1250,2010,2008],{"__ignoreMap":1248},[1097,2012,2013],{},"• 删除第2个元素（值为2），后续元素前移\n• 时间复杂度：O(n)",[1170,2015,2017],{"start":2016},5,[1173,2018,2019],{},[1120,2020,2021],{},"元素查找",[1242,2023,2026],{"className":2024,"code":2025,"language":1247,"meta":1248},[1245],"selectTable(&my_table, target);\n",[1250,2027,2025],{"__ignoreMap":1248},[1097,2029,2030],{},"• 使用顺序查找，返回元素位置\n• 时间复杂度：O(n)",[1170,2032,2033],{"start":936},[1173,2034,2035],{},[1120,2036,2037],{},"逆序操作",[1242,2039,2042],{"className":2040,"code":2041,"language":1247,"meta":1248},[1245],"reverseTable(&my_table);\n",[1250,2043,2041],{"__ignoreMap":1248},[1097,2045,2046],{},"• 通过对称交换实现逆序\n• 时间复杂度：O(n)",[1170,2048,2049],{"start":899},[1173,2050,2051],{},[1120,2052,2053],{},"销毁顺序表",[1242,2055,2058],{"className":2056,"code":2057,"language":1247,"meta":1248},[1245],"destroyTable(&my_table);\n",[1250,2059,2057],{"__ignoreMap":1248},[1097,2061,2062],{},"• 释放动态内存并将指针置空\n• 防止内存泄漏的关键操作",[1163,2064,2066],{"id":2065},"执行结果示例","执行结果示例：",[1242,2068,2073],{"className":2069,"code":2071,"language":2072},[2070],"language-text","=== 初始化顺序表 ===\n[当前表长: 0, 总容量: 5]\n\n\n=== 插入5个元素 ===\n[当前表长: 5, 总容量: 5]\n1 2 3 4 5\n\n已扩容至 10\n=== 插入第6个元素触发扩容 ===\n[当前表长: 6, 总容量: 10]\n1 2 6 3 4 5\n\n=== 删除第2个元素 ===\n[当前表长: 5, 总容量: 10]\n1 6 3 4 5\n\n=== 查找元素 6 ===\n元素 6 位于第 2 位\n=== 修改元素 6 → 66 ===\n[当前表长: 5, 总容量: 10]\n1 66 3 4 5\n\n=== 逆序顺序表 ===\n[当前表长: 5, 总容量: 10]\n5 4 3 66 1\n\n=== 销毁后的状态 ===\n指针状态: 已释放\n","text",[1250,2074,2071],{"__ignoreMap":1248},[1163,2076,2078],{"id":2077},"复杂度对比","复杂度对比：",[1735,2080,2081,2097],{},[1738,2082,2083],{},[1741,2084,2085,2088,2091,2094],{},[1744,2086,2087],{},"操作",[1744,2089,2090],{},"最好情况",[1744,2092,2093],{},"最坏情况",[1744,2095,2096],{},"平均情况",[1765,2098,2099,2111,2122,2133,2144],{},[1741,2100,2101,2103,2106,2109],{},[1770,2102,1554],{},[1770,2104,2105],{},"O(1)",[1770,2107,2108],{},"O(n)",[1770,2110,2108],{},[1741,2112,2113,2116,2118,2120],{},[1770,2114,2115],{},"删除",[1770,2117,2105],{},[1770,2119,2108],{},[1770,2121,2108],{},[1741,2123,2124,2127,2129,2131],{},[1770,2125,2126],{},"查找",[1770,2128,2105],{},[1770,2130,2108],{},[1770,2132,2108],{},[1741,2134,2135,2137,2140,2142],{},[1770,2136,1897],{},[1770,2138,2139],{},"-",[1770,2141,2108],{},[1770,2143,2108],{},[1741,2145,2146,2149,2151,2153],{},[1770,2147,2148],{},"初始化",[1770,2150,2105],{},[1770,2152,2105],{},[1770,2154,2105],{},[1097,2156,2157],{},"​ 首先是插入操作，插入操作时间复杂度最小的情况是，当元素要插入到最后一个位置时，你就不需要移动任何元素即可实现，只需要将需要插入的元素插在表的末端即可，时间复杂度O(1)，最费时的操作就是插入的元素要放在表头，那我们就需要把表中的所有元素都移动了,时间复杂度为O(n)。",[1097,2159,2160],{},"​ 删除操作也如此，当我们要删除最后一个元素，也不需要移动顺序表，而删除第一个元素时需要移动整个表。我们知道，在实际的操作中，删除表中的任何一个位置需要被插入删除的可能性是相同的，因此从平均角度来分析，移动表的平均次数为 (n - 1) \u002F 2，时间复杂度为O(n)。\n​ 因此我们可以看出，顺序表在插入、删除操作时是比较费时间的，然而其他的基本操作例如初始化、建表或者销毁，时间复杂度都是O(1)，因此我们在使用顺序表的时候，要尽量让表保持不变，而是多多使用顺序表的存储和随机提取等优点。",[1106,2162,2163],{"id":2163},"优缺点分析",[1097,2165,2166],{},"顺序表主要有如下一些优点：",[1170,2168,2169,2172,2175],{},[1173,2170,2171],{},"顺序表进行随机提取元素的效率较高，能够快速存储、提取元素；",[1173,2173,2174],{},"建表时无需对表中元素的逻辑关系进行描述，各元素在存储地址上是连续的；",[1173,2176,2177],{},"对于CPU，顺序表的高速缓存效率更高，且CPU流水线也不会总是被打断。",[1097,2179,2180],{},"顺序表主要有如下一些缺点：",[1170,2182,2183,2186,2189],{},[1173,2184,2185],{},"申请顺序表时，顺序表存储元素的上限是固定的，这就导致了存在溢出的可能性；",[1173,2187,2188],{},"插入、删除元素时，时间复杂度较大，需要大范围移动表中的元素；",[1173,2190,2191],{},"由于我们在很多情况下无法预知需要存储多少元素，因此容易导致内存碎片的现象，即申请了空间却没有充分利用。",[1097,2193,2194],{},[1120,2195,2196],{},"关于链表再新开一个页面",{"title":1248,"searchDepth":2000,"depth":2000,"links":2198},[2199,2203,2210,2218,2223,2228],{"id":1108,"depth":1966,"text":1109,"children":2200},[2201,2202],{"id":1165,"depth":1983,"text":1165},{"id":1196,"depth":1983,"text":1196},{"id":1222,"depth":1966,"text":1223,"children":2204},[2205,2206,2207,2209],{"id":1240,"depth":1983,"text":1240},{"id":1254,"depth":1983,"text":1254},{"id":1300,"depth":1983,"text":2208},"1. t->head 的定义与作用",{"id":1328,"depth":1983,"text":1328},{"id":1352,"depth":1966,"text":1353,"children":2211},[2212,2213,2214,2215,2216],{"id":1359,"depth":1983,"text":1359},{"id":1432,"depth":1983,"text":1432},{"id":1458,"depth":1983,"text":1458},{"id":1485,"depth":1983,"text":1485},{"id":1508,"depth":1983,"text":2217},"关于 t->head,t->length 和 t->size",{"id":1894,"depth":1966,"text":1894,"children":2219},[2220,2221,2222],{"id":1897,"depth":1983,"text":1897},{"id":1906,"depth":1983,"text":1906},{"id":1917,"depth":1983,"text":1917},{"id":1926,"depth":1966,"text":1926,"children":2224},[2225,2226,2227],{"id":1946,"depth":1983,"text":1947},{"id":2065,"depth":1983,"text":2066},{"id":2077,"depth":1983,"text":2078},{"id":2163,"depth":1966,"text":2163},"md",false,{"uuid":2232,"slots":2233},"a9227e80-1227-11f0-8e0f-8728479c2945",{},true,{"title":1085,"description":1099},"posts\u002F数据结构\u002F数据结构-线性表（顺序表）",[42,43,188],"n6kAi24nsxa3roK6lpccbZhaGcBxKGeJNIwU8B6JBw4",1790443288625]