【数据结构学习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/8/13 20:46:14 阅读更多 →
3分钟掌握Windows防撤回神器:RevokeMsgPatcher完整使用指南

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

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

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

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

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

2026/8/13 20:45:13 阅读更多 →

最新新闻

2026年最新重庆市轨道交通图和 重庆轨道交通规划图 附图

2026年最新重庆市轨道交通图和 重庆轨道交通规划图 附图

重庆轨道交通(Chongqing Rail Transit,CRT)是服务于中国重庆市境内的城市轨道交通系统,其第一条线路于2005年6月18日开通试运营 [1],使重庆市成为中国内地第九座、西部地区第一座开通城市轨道交通的城市 截至2026年2月…

2026/8/13 22:43:24 阅读更多 →
2026年最新武汉市轨道交通图和 武汉轨道交通规划图 附图

2026年最新武汉市轨道交通图和 武汉轨道交通规划图 附图

武汉地铁(Wuhan Metro),是服务于中国湖北省武汉市的城市轨道交通,其首条线路——武汉地铁1号线于2004年7月28日正式开通 [1],于2004年9月28日进入正式运营阶段 [2],使武汉成为中国内地第七座开通城市轨道交…

2026/8/13 22:43:24 阅读更多 →
Vue3项目集成第三方库:从选型到优化的完整实践指南

Vue3项目集成第三方库:从选型到优化的完整实践指南

1. 项目概述:为什么Vue3应用需要“集成第三方库”? 在Vue3生态中,无论是构建一个简单的后台管理系统,还是一个复杂的数据可视化大屏,我们几乎不可能从零开始造轮子。想象一下,你需要一个日期选择器&#xf…

2026/8/13 22:43:24 阅读更多 →
本地AI写作工具原理与实战:从大模型部署到百万字生成策略

本地AI写作工具原理与实战:从大模型部署到百万字生成策略

1. 项目概述:当AI写作助手说要“跑”15个小时 最近在折腾AI写作工具的朋友,可能都听过或者用过“龙虾openclaw”这个项目。它本质上是一个开源的、基于大语言模型的文本生成工具,你可以把它理解为一个部署在自己电脑上的、功能更强大的“AI写…

2026/8/13 22:43:24 阅读更多 →
Linux系统运维:使用ps命令深入排查多线程应用性能问题

Linux系统运维:使用ps命令深入排查多线程应用性能问题

1. 从一次线上故障排查说起:为什么只看进程不够 那天下午,监控系统突然报警,提示某个核心服务的CPU使用率飙升到200%以上,但内存和网络IO都还正常。我第一反应是登录服务器,用最熟悉的 top 命令看了一眼,…

2026/8/13 22:43:24 阅读更多 →
RT-Thread外部中断实战:从轮询到事件驱动的高效开发

RT-Thread外部中断实战:从轮询到事件驱动的高效开发

1. 项目概述:从轮询到中断,嵌入式开发的效率革命 在嵌入式开发里,处理外部信号,比如按键按下、传感器触发或者通信接口的握手信号,是再常见不过的需求。新手最直接的想法可能就是“轮询”:在主循环里不停地…

2026/8/13 22:42:24 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →