【数据结构】链表结构 如何 头插 尾插入 增删改查 操作

发布时间:2026/10/7 17:52:19

【数据结构】链表结构 如何 头插 尾插入 增删改查 操作 基本概念数据结构存储一种或者多种特定关系的数据集合如何组织和存储程序设计数据结构算法数据与数据之间的关系逻辑结构数据元素与元素之间的关系集合数据元素与元素之间关系平等线性结构数据元素与元素支架确定一对一的关系顺序表数组链表队列栈树形结构元素与元素之间具有一对多的关系二叉数图形结构数据元素与元素之间多对多的关系A向上向下都可以检索到很多的数据元素物理结构顺序存储结构1.一个连着一个存储有连续性与顺序表数组时间复杂度为o12. 预算数据插入或者删除需要把删除位置后面的元素向前提一个地址3.访问元素效率高4.需要预分配空间可能造成空间浪费或者数组越界链式存储方式可以选取非连续的空间进行存储1.内存空间可以不连续2.插入和删除只需要 将上一个元素跟的指针指向插入元素的首地址比比较方便3.访问元素需要进行遍历4.不需要预分配内存空间可以根据数据动态储存散列存储哈希存储将要储存的元素用函数映射在内存上索引存储将要储存元关键字和储存诶之构建索引表数据的索引需要通过查表查找真正的数据地址单项链表API应用程序接口1. 创建链表2. 链表插入(头插、尾插)3. 链表删除头删、尾删4. 查找5. 修改6. 链表遍历7. 链表销毁在一下我会用图文的形式演示如何构造单列表其中我们可以把头节点也就是操作主链设置为一个结构体link_h * plink 那么plink就是头节点的首地址 其中存有 plink首地址 和 clean 链表的长度链表数据类型构造//链表结点类型 typedef struct node { int data; //数据域保存的数据 struct node *pnext; //指针域下一个结点的地址 }Node_t; //链表对象类型 typedef struct link { Node_t *phead; //链表头节点指针 int clen; //链表当前结点的个数 }Link_t;单向链表的创建当我们在创建的时候需要为头结点进行开辟堆上的空间进行储存然而在我们开辟node节点的时候也需要我们开辟一个malloc的储存空间去进行增加节点 并且头文件中需要增加#include《stdlib.h》单向链表尾插 Link_t *create_link() { Link_t *plink malloc(sizeof(Link_t)); if (NULL plink) { printf(malloc error\n); return NULL; } plink-phead NULL; plink-clen 0; return plink; }单向链表头插int insert_link_head(Link_t *plink, int data) { Node_t *pinsert malloc(sizeof(Node_t)); if (NULL pinsert) { printf(malloc error\n); return -1; } pinsert-data data; pinsert-pnext NULL; pinsert-pnext plink-phead; plink-phead pinsert; plink-clen; return 0;extern }单向链表尾插int insert_link_tail(Link_t *plink, int data) { Node_t *pinsert malloc(sizeof(Node_t)); if (NULL pinsert) { printf(mallocc error\n); return -1; } pinsert-data data; pinsert-pnext NULL; if (is_empty_link(plink)) { plink-phead pinsert; } else { Node_t *ptmp plink-phead; while (ptmp-pnext ! NULL) { ptmp ptmp-pnext; } ptmp-pnext pinsert; } plink-clen; return 0; }单向链表尾删int delete_link_tail(Link_t *plink) { if (is_empty_link(plink)) { return -1; } else if (NULL plink-phead) { free(plink-phead); plink-phead NULL; } else { Node_t *ptmp plink-phead; while (ptmp-pnext-pnext ! NULL) { ptmp ptmp-pnext; } free(ptmp-pnext); ptmp-pnext NULL; } plink-clen--; return 0; }内存泄露谨防就是要用户自己申请的堆区空间使用完没有及时释放则造成内存泄露。检测程序有没有内存泄露valgrind内存错误检测工具GNU提供可以检测程序运行过程中的内存泄露情况以及野指针的使用情况等。使用方法 在linux命令行进行输入valgrind a.out进行检测安装valgrind工具sudo apt-get isntall valgrind 编译完程序后使用 valgrind ./a.out valgrind --leak-checkfull ./a.out 6742 HEAP SUMMARY: 6742 in use at exit: 112 bytes in 7 blocks 6742 total heap usage: 10 allocs, 3 frees, 1,168 bytes allocated 6742 6742 LEAK SUMMARY: 6742 definitely lost: 16 bytes in 1 blocks 6742 indirectly lost: 96 bytes in 6 blocks 6742 possibly lost: 0 bytes in 0 blocks 6742 still reachable: 0 bytes in 0 blocks 6742 suppressed: 0 bytes in 0 blocks 6742 Rerun with --leak-checkfull to see details of leaked memory
延伸阅读

更多相关文章

2026/10/7 4:00:19

AI公司上市潮下,开发者如何构建抗风险的多模型调用架构

最近,AI领域的融资与上市动向,成了开发者圈子里一个绕不开的“技术风向标”。当看到“Anthropic拟九月上市,OpenAI或明年跟进”这样的标题时,很多人的第一反应可能是:这跟我写代码、调模型有什么关系?这难道…

2026/10/7 17:54:09

开源视频制作工具ZJT智剧通实战:从故事板到AI口型同步全流程指南

在视频创作和影视制作领域,从构思到成片,往往需要经历故事板绘制、分镜设计、视频剪辑与修改等多个复杂环节。对于独立创作者、小型工作室或学生团队而言,一套功能强大且成本可控的工具至关重要。近期,一款名为“ZJT智剧通”的开源…

2026/10/7 18:11:49

M4 Max Mac Studio 本地部署 Qwen 27B 大模型推理性能实测与调优

1. 为什么要在 Mac Studio 上折腾本地大模型推理把一台 M4 Max Mac Studio 摆在桌上跑 Qwen 3.8 27B,这件事本身就带着一点"反常识"的味道。绝大多数人的第一反应是:要跑 27B 级别的模型,怎么着也得上张 4090 或者 A100 吧&#xf…

2026/10/7 18:11:49

HyperV虚拟机在休眠后无法连接问题

刚装完的LINUX,发现显示屏休眠之后,用XSHELL无法连接上,原来是网卡节能在搞鬼! 打开 设备管理器 -> 展开 网络适配器 -> 右键点击正在使用的物理网卡 -> 属性 -> 电源管理 选项卡 -> 取消勾选“允许计算机关闭此设…

2026/10/7 18:11:49

OpenAI急刹车背后:AI Agent内网安全防护实战指南

1. 事件背景与核心概念拆解 1.1 这个标题到底在说什么 先把标题拆开看。"OpenAI突发急刹车"指的是OpenAI在某个时间节点紧急叫停或限制了一项功能或服务;"AI竟在全网植入自我复制代码"这个说法带有很强的传播性,但从技术角度理解&a…

2026/10/7 18:11:49

中短波发射台站关停与重启:从年表制作到频率资源变迁分析

“关停与重启”不只是开关机,它背后是一个发射台站从立项、建设、运行到退役的全生命周期管理。我做中短波发射相关技术工作这些年,眼见着行业里一个个熟悉的主波频点悄然消失,又看着少数台站借着固态化改造、DRM数字化重生。最近我把手头积攒…

2026/10/7 18:11:49

Java性能优化实战:从定位瓶颈到JVM调优与代码优化

1. 性能问题的认知框架:先定位再优化,别一上来就调JVM参数做Java性能优化这些年,我最深的体会是:大部分性能事故,不是被"优化"解决的,而是被"正确归因"解决的。很多同学遇到线上接口变…

2026/10/7 18:06:49

YOLOv11光伏板污渍检测与清洁机器人路径规划实战

简介:面向能源行业的YOLOv11光伏板表面污渍检测与清洁机器人路径规划PDF文档,适合从事光伏电站运维、计算机视觉算法研究及清洁机器人开发的技术读者。文档共30页,压缩包内仅1个PDF文件,大小1.88MB,已生成完整目录&…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

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

2026/10/7 1:05:03

ESP32免重刷固件:浏览器直接修改NVS键值实现WiFi配置更新

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

2026/10/7 1:05:03

SAP HANA查询结果导出CSV:避开乱码、性能与权限的实用指南

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

2026/10/7 1:05:03

数字后端Placement阶段Density与Congestion控制实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑