【数据结构学习1】数据结构基本概念及单向链表
文章目录数据结构一、数据结构的基本概念二、数据结构数据与数据之间的关系2.1 逻辑结构2.2 物理结构2.3 数据结构主要学习内容2.4 知识储备三、单向链表3.1 创建链表3.2 链表插入3.3 链表删除3.4 链表查找3.5 链表修改3.6 链表遍历3.7 链表销毁数据结构一、数据结构的基本概念数据定义数据是描述客观事物的符号是计算机中可以操作的对象是能被计算机识别并输入给计算机处理的符号集合。注数据其实就是符号其必须具备两个条件可以输入到计算机中。能被计算机处理。数据元素是组成数据的、有一定意义的基本单位在计算机中通常作为整体处理也被称为记录。例如禽类的数据元素就有牛、马、羊等等。数据项一个数据元素可以由若干项数据项组成。数据项是数据不可分割的最小单位。数据对象是性质相同的数据元素的集合是数据的子集数据结构存储具有一种或多种特定关系的数据的集合如何存储数据。二、数据结构数据与数据之间的关系2.1 逻辑结构数据元素与元素之间的关系集合数据元素与元素之间关系平等即集合结构中的数据元素除了同属于一个集合外它们之间没有其他关系。线性结构数据元素与元素之间一对一的关系顺序表数组、链表、队列、栈树形结构数据元素与元素之间一对多的关系二叉树图形结构数据元素与元素之间多对多的关系网状结构2.2 物理结构顺序存储选取内存中连续空间进行存储代表顺序表数组特点内存空间必须连续数据元素的插入和删除需要移动后续大量数据访问元素效率高需要预分配内存空间分配不合适可能会造成内存浪费或者数组越界。链式存储可以选取非连续内存空间进行存储代表链式表特点内存空间可以不连续插入和删除数据元素方便访问数据必须要遍历不需要预分配空间可以根据数据动态存储。索引存储将要存储的元素关键字和存储位置构建索引表数据查找是通过查询索引表获取数据的真正存储位置。散列存储哈希存储将要存储的元素关键字和存储位置之间建立起对应关系这个关系称为哈希函数数据存储时按照哈希函数的映射进行存储数据查找时也按照哈希函数的映射进行查找。2.3 数据结构主要学习内容顺序表数组单向链式表双向链表循环链表队列栈二叉树哈希表2.4 知识储备C语言中的结构体和指针相关文章【C语言6】指针学习超详细【C语言7】构造数据类型学习动态内存分配相关文章【C语言8、9】内存管理、位运算及程序调试方法学习三、单向链表API应用程序接口创建链表链表插入头插、尾插链表删除查找修改链表遍历链表销毁3.1 创建链表链表数据类型的构建//链表结点类型typedefstructnode{intdata;//数据域保存的数据structnode*pnext;//指针域下一个结点的地址}Node_t;//链表对象类型typedefstructlink{Node_t*phead;//链表头节点指针intclen;//链表当前结点的个数}Link_t;单项链表的创建Link_t*create_link(){Link_t*plinkmalloc(sizeof(Link_t));if(NULLplink){printf(malloc error\n);returnNULL;}plink-pheadNULL;plink-clen0;returnplink;}3.2 链表插入头插从链表的前面插入数据intinsert_link_head(Link_t*plink,intdata){Node_t*pinsertmalloc(sizeof(Node_t));if(NULLpinsert){printf(malloc error\n);return-1;}pinsert-datadata;pinsert-pnextNULL;pinsert-pnextplink-phead;plink-pheadpinsert;plink-clen;return0;}尾插从链表的最后插入数据intinsert_link_tail(Link_t*plink,intdata){Node_t*pinsertmalloc(sizeof(Node_t));if(NULLpinsert){printf(mallocc error\n);return-1;}pinsert-datadata;pinsert-pnextNULL;if(is_empty_link(plink)){plink-pheadpinsert;}else{Node_t*ptmpplink-phead;while(ptmp-pnext!NULL){ptmpptmp-pnext;}ptmp-pnextpinsert;}plink-clen;return0;}3.3 链表删除头删intdelete_link_tail(Link_t*plink){if(is_empty_link(plink)){return-1;}elseif(NULLplink-phead-pnext){free(plink-phead);plink-pheadNULL;}else{Node_t*ptmpplink-phead;while(ptmp-pnext-pnext!NULL){ptmpptmp-pnext;}free(ptmp-pnext);ptmp-pnextNULL;}plink-clen--;return0;}尾删intdelete_link_tail(Link_t*plink){if(is_empty_link(plink)){return-1;}elseif(NULLplink-phead){free(plink-phead);plink-pheadNULL;}else{Node_t*ptmpplink-phead;while(ptmp-pnext-pnext!NULL){ptmpptmp-pnext;}free(ptmp-pnext);ptmp-pnextNULL;}plink-clen--;return0;}3.4 链表查找先用临时指针指向链表头部循环遍历每一个节点不断对比节点内存储的数据与目标数据若匹配成功直接返回当前节点的指针方便外部对该节点进行后续操作如果遍历到链表末尾仍未找到匹配数据就返回空指针代表查找失败。Node*find(Link*plink,intdata){Node*ptmpplink-phead;while(ptmp!NULL){if(ptmp-datadata){returnptmp;}ptmpptmp-pnext;}returnNULL;}3.5 链表修改传入待查找的原始数据 src 和要替换的新数据 des先调用查找函数定位存着 src 的节点若查找返回空指针说明链表没有该数据打印提示信息若找到对应节点则直接修改节点内部存储的数据为 des 并提示修改完成。该逻辑存在局限当链表中有多个相同 src 数值时只会修改第一个匹配到的节点。voidmodify(Link*plink,intdes,intsrc){Node*find_addrfind(plink,src);if(find_addrNULL){printf(link dont have this data\n);}else{find_addr-datades;printf(data %d modify %d\n,src,des);}}3.6 链表遍历定义临时游标从链表头节点开始循环依次读取并打印每个节点的数据每轮循环将游标移动到下一个节点直到游标为空即遍历完整条链表后换行结束。voidshow_link(Link*plink){Node*ptmpplink-phead;while(ptmp!NULL){printf(%d ,ptmp-data);ptmpptmp-pnext;}printf(\n);}3.7 链表销毁链表销毁是防止内存泄漏的关键函数负责释放链表全部堆区内存。循环判断链表不为空时重复调用头删函数逐个释放每一个动态创建的节点等所有节点内存全部释放完毕后再释放用来管理链表的结构体 plink。C 语言中用 malloc 申请的堆内存不会自动回收如果程序结束不执行销毁函数节点和链表结构体占用的内存会持续占用造成内存泄漏可使用 valgrind 工具检测该类内存问题。voiddestroy_link(Link*plink){while(!is_empty_link(plink)){del_head_link(plink);}free(plink);}用户自己申请的堆区空间使用完没有及时释放则造成内存泄露。检测程序有没有内存泄露valgrind内存错误检测工具GNU提供可以检测程序运行过程中的内存泄露情况以及野指针的使用情况等。使用方法安装valgrind工具sudo apt-get install valgrind使用valgrind./a.out valgrind--leak-checkfull./a.out

相关新闻

如何构建企业级智能代理系统:Embabel Agent框架的现代化架构设计指南

如何构建企业级智能代理系统:Embabel Agent框架的现代化架构设计指南

如何构建企业级智能代理系统:Embabel Agent框架的现代化架构设计指南 【免费下载链接】embabel-agent Agent framework for the JVM. Pronounced Em-BAY-bel /ɛmˈbeɪbəl/ 项目地址: https://gitcode.com/GitHub_Trending/em/embabel-agent Embabel Agent…

2026/10/11 0:16:45 阅读更多 →
3分钟掌握Windows防撤回神器:RevokeMsgPatcher完整使用指南

3分钟掌握Windows防撤回神器:RevokeMsgPatcher完整使用指南

3分钟掌握Windows防撤回神器:RevokeMsgPatcher完整使用指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitco…

2026/10/4 20:31:46 阅读更多 →
揭秘电子商务网站建设侧重点:避开流量陷阱与转化雷区,打造高利润店铺全指南

揭秘电子商务网站建设侧重点:避开流量陷阱与转化雷区,打造高利润店铺全指南

说实话,现在做电商,早就不是当年那个“只要是个淘宝店就能躺赚”的年代了。很多老板或者刚入行的创业者,在提到“电子商务网站建设”这件事的时候,脑海里浮现的第一个画面往往是:找个便宜的模板,套个现成的页面,把产品图往上堆,然后坐等订单滚滚来。如果真有这种好事,…

2026/10/7 13:31:45 阅读更多 →

最新新闻

AI Agent外挂记忆系统mem0实战:可演化的语义记忆架构

AI Agent外挂记忆系统mem0实战:可演化的语义记忆架构

1. 项目概述:为什么一个“外挂记忆”能让AI Agent真正像人一样思考?最近在几个技术社区里,几乎每天都能看到有人问:“我的AI Agent跑着跑着就忘了上一轮聊了什么,指令一多就开始自相矛盾,这到底算智能还是人…

2026/10/12 10:05:55 阅读更多 →
对比 Claude Code 与 Cursor 后,DeepSeek Harness 的插件化架构优势在哪

对比 Claude Code 与 Cursor 后,DeepSeek Harness 的插件化架构优势在哪

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

2026/10/12 10:05:55 阅读更多 →
Gemini 是什么?kimi K2.5 的区别是什么——用 TaoToken 统一 Key 实测对比

Gemini 是什么?kimi K2.5 的区别是什么——用 TaoToken 统一 Key 实测对比

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

2026/10/12 10:05:55 阅读更多 →
大模型融资热潮背后的技术选型与落地避坑指南

大模型融资热潮背后的技术选型与落地避坑指南

最近圈子里都在传某头部大模型团队的新一轮融资消息,传闻金额直接站上了八百亿元量级,参投名单里既有互联网平台的影子,也有新能源产业链里的巨头。很多朋友看到这种新闻的第一反应是“AI行业真有钱”,但作为常年在一线做技术选型…

2026/10/12 10:05:55 阅读更多 →
S3C2440裸机开发实战:从启动流程到第一个可运行程序

S3C2440裸机开发实战:从启动流程到第一个可运行程序

1. 拿到一块裸机开发板,先别急着写代码S3C2440 这颗芯片在嵌入式圈子里算是老资历了,ARM9 架构、主频 400MHz 起步、外设接口丰富,当年多少人的第一个裸机程序就是在它上面跑起来的。现在回头看,拿它入门裸机开发依然是个相当扎实…

2026/10/12 10:05:55 阅读更多 →
写给自己的话:如何用结构化自我对话破解学习困惑

写给自己的话:如何用结构化自我对话破解学习困惑

1. 为什么“写给自己的话”反而是最难写的一种内容你有没有过这种体验:打开备忘录,手指悬在键盘上半天,脑子里翻江倒海,最后只憋出一句“今天好累”。明明是想写给自己的话,想梳理一下学习中的困惑,结果写出…

2026/10/12 10:04:54 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/11 14:36:54 阅读更多 →