当前位置: 首页 > news >正文

数据结构(1)

数据结构前导篇1.什么是数据结构一组用来保存一种或多种特定关系的数据集合组织和存储数据。程序设计 数据结构 算法2. 数据与数据之间的关系2.1逻辑结构数据元素与元素之间的关系集合平等关系线性结构元素与元素之间一对一的关系(顺序表链表队列、栈)树形结构元素与元素之间一对多的关系(二叉树)图形结构元素与元素之间多对多的关系(图)2.2物理结构 数据元素在计算机内存中的存储方式2.2.1 顺序结构选用一段连续的内存空间数组1. 数据访问方便通过角标直接访问O12. 元素插入和删除需要移动大量数据效率低3. 预分配内存空间2.2.2 链式结构选用非连续的内存空间链表1. 数据访问需要遍历On2. 插入和删除元素方便3. 不需要预分配可以动态存储需要的时候申请空间 malloc4. 可以有效利用内存碎片2.1.3 内存碎片一些游离的小的内存空间2.1.4 散列结构哈希结构将要存储的数据的关键字和存储位置之间构建映射关系哈希函数存储和查找都根据映射关系查找。2.1.5索引存储通关索引表寻找数据的存储位置。为了提高数据的查找效率。3.知识储备1. 指针2. 动态内存分配3. 结构体4. 指针函数设计思想封装----》模块化------》高内聚一个功能模块只做一件事低耦合模块与模块之间的关联度低增强复用性。4. 学习内容1. 顺序表数组2. 链表单向链表双向链表循环链表内核链表3. 队列4. 栈5. 二叉树6. 排序和查找算法链表1.单向链表节点1.头节点地址 ( phead )2. 当前结点个数 (clen)3. ......1.1. 创建链表//创建一个头结点 Link_t *create_link() { Link_t *plink malloc(sizeof(Link_t));//申请堆空间 //判断空间是否申请成功为空返回 值-1并输出“malloc error” if (NULL plink) { printf(malloc error\n); return NULL; } plink-phead NULL; plink-clen 0; return plink; }1.2. 插入数据头插、判空、尾插1.2.1. 头插//头插 int insert_link_head(Link_t *plink, Datatype_t data) { Node_t *pnode malloc(sizeof(Node_t));//申请堆空间 //判断空间是否申请成功为空返回 值-1并输出“malloc error” if (NULL pnode) { printf(malloc error\n); return -1; } pnode-data data; pnode-pnext NULL; //交换的顺序不能变不然会导致原本第一个节点的指针丢失 pnode-pnext plink-phead;//先将要加入的节点的pnext指针指向原本第一个节点的指针即指向plink-phead plink-phead pnode;//再将链表头指针指向要插入节点的指针即指向pnode plink-clen; return 0; }1.2.2. 判空//判断链表是否为空是则返回 值1不是则返回 值0 int is_empty_link(Link_t *plink) { if (NULL plink-phead) { return 1; } return 0; }1.2.3. 尾插//查找尾结点p plink-phead;while (p-pnext ! NULL){p p-pnext;}//尾插 int insert_link_wei(Link_t *plink, Datatype_t data) { Node_t *pnode malloc(sizeof(Node_t));//申请堆空间 Node_t *p NULL; //判断空间是否申请成功为空返回 值-1并输出“malloc error” if (NULL pnode) { printf(malloc error\n); return -1; } pnode-data data; pnode-pnext NULL; //判断链表是否为空 if (is_empty_link(plink)) { plink-phead pnode; } else { p plink-phead; while (p-pnext ! NULL) //查找尾结点 { p p-pnext; } p-pnext pnode; } plink-clen; return 0; }3.遍历输出//遍历结点p plink-phead;while (p ! NULL){p p-pnext;}//遍历输出 int show_link(Link_t *plink) { Node_t *ptmp NULL; ptmp plink-phead; int i 0; //while里的条件要注意满足条件才执行 while (NULL ! ptmp) { printf(no%d is %d\n, i, ptmp-data); ptmp ptmp-pnext; i; } printf(\n); return 0; }4. 删除数据头删、尾删1.4.1. 头删//头删 int delete_link_head(Link_t *plink) { if (is_empty_link(plink)) { return 0; } Node_t *pfree plink-phead; plink-phead pfree-pnext; free(pfree); plink-clen--; return 0; }1.4.2. 尾删//查找倒数第二个结点p plink-phead;while (p-pnext-pnext ! NULL){p p-pnext;}//尾删 int delete_link_wei(Link_t *plink) { Node_t *p NULL; if (is_empty_link(plink)) { return 0; } else if (1 plink-clen) { delete_link_head(plink); } else { p plink-phead; //遍历链节点 while (p-pnext-pnext ! NULL) //查找倒数第二个结点 { p p-pnext; } free(p-pnext);//释放空间 p-pnext NULL;//指针指向空NULL避免成为野指针 plink-clen--; } return 0; }5.释放链表//释放申请的堆区域内存空间 void destory_link(Link_t *plink) { while (!is_empty_link(plink)) { delete_link_head(plink); } free(plink); }. 查找. 修改valgrind GNU提供的一个内存错误检查软件1.简介valgrind 是GNU提供的一个内存错误检查软件检测是否有内存泄漏在程序运行过程中检查内存错误。2.安装方法Linux联网后在终端输入如下命令sudo apt-get install valgrind3. 使用方法valgrind ./可执行程序valgrind ./a.outlinuxubuntu:~/2026/5.22$ valgrind ./a.out43550 Memcheck, a memory error detector43550 Copyright (C) 2002-2017, and GNU GPLd, by Julian Seward et al.43550 Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info43550 Command: ./a.out43550no0 is 10no1 is 3no2 is 2no3 is 1no4 is 12no0 is 3no1 is 2no2 is 12, 0x522f0e01, 0x522f090no0 is 3no1 is 2no2 is 1no0 is 3no1 is 8no2 is 7clen is 30x522f0907, 0x522f0908, 0x522f0e04355043550 HEAP SUMMARY:43550 in use at exit: 0 bytes in 0 blocks43550 total heap usage: 7 allocs, 7 frees, 1,120 bytes allocated4355043550 All heap blocks were freed -- no leaks are possible4355043550 For counts of detected and suppressed errors, rerun with: -v43550 ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
http://www.gsyq.cn/news/1393413.html

相关文章:

  • UE5 PhysicsControl物理动画保姆级教程:从插件开启到蓝图配置,手把手教你让角色动起来
  • 终极指南:IDM激活脚本免费永久解锁下载管理器完整解决方案
  • STM32F4 HAL库驱动W25Q256:从硬件焊接到软件调试的完整实践
  • 硬件木马检测中边界网络标签污染的对抗攻击与防御
  • 每天一小时,多赚100+,我靠这个方法,赚了很多小钱~
  • 黄冈黄州本地黄金回收全攻略:2026年5月实时金价行情与市民变现实录 - 润富黄金珠宝行
  • 6.Hermes兜底模型,太关键了
  • VisualCppRedist AIO:Windows运行库一键修复的终极解决方案
  • 大白话彻底听懂PyTorch autograd的底层逻辑
  • SQL工程师技能大揭秘:从数据量级处理到业务交互分析
  • 拉曼光谱基线漂移救星:深入理解多项式拟合校正中的‘残差判断’与‘峰值消除’
  • 铁桶厂家生产规模与产能——偃师市中原制桶有限公司 - 速递信息
  • EyesGuard:你的数字护眼管家,告别屏幕疲劳的终极方案
  • 百度脑图KityMinder:开源思维导图工具让你的创意无限延伸
  • 成都西装定制日常必逛实力店铺 - 西装爱好者
  • 为什么你的团队还在用Selenium硬编码?Lovable声明式测试范式已成2024头部科技公司准入标准
  • 技术赋能童趣新生态 童梦奇遇AI定制绘本引领亲子文创全新升级
  • 序列化和反序列化二叉搜索树(一)
  • 告别黑屏!手把手教你为OpenCore 0.8.5换上高颜值GUI启动菜单(附主题资源)
  • Hyper-V也能玩转GPU?Win11专业版搭建直通GPU的Ubuntu虚拟机实战
  • RIS-SWIPT系统硬件损伤与相位幅度耦合建模及性能分析
  • 告别U盘!手把手教你用Samba在Ubuntu 22.04上搭个家庭文件共享中心
  • 沈阳名表去哪里回收靠谱?内行人真实测评分享 - 合扬奢侈品交易中心
  • 保姆级教程:在VMware Workstation 17 Pro上绕过TPM 2.0,成功安装Windows 11虚拟机
  • 嵌入式直流输电电压交互评估:从黑盒仿真到白盒解析的EVIF方法
  • 在Ubuntu 20.04上搞定ORB-SLAM2与ROS Noetic的OpenCV版本冲突(附完整解决方案)
  • 别再乱删了!深入理解Linux中libc.so.6与glibc版本的那些事儿
  • 联合语音-文本嵌入架构:统一模型实现ASR、TTS与说话人识别
  • 2026丽江市本地人必选的水质检测专业机构TOP7推荐!生活饮用水检测、直饮水检测、污水废水检测、矿泉水检测,正规CMA资质检测公司排名推荐 (2026年5月水质检测最新深度调研方案) - 防水补漏3
  • 实战指南:构建现代化Nginx监控系统的完整方案