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

数据结构--day1

栈与堆栈的内存分配是连续的变量的生命周期与函数调用周期一致函数结束时自动释放。堆的内存分配是动态的不连续需要显式申请和释放如C/C中的malloc/free或new/delete。栈的访问速度更快因为内存地址连续且分配/释放操作简单。堆的访问速度较慢需要通过指针间接访问且可能引发内存碎片问题。栈中变量的生命周期由作用域决定超出作用域后自动回收。堆中变量的生命周期由程序员控制忘记释放会导致内存泄漏。在堆上typedef struct student { char name[50]; int id ; ]stu_t;//定义了一个结构体别名叫stu_t stu_t *create_stu(char name,int id)//stu_t* 表示函数返回一个指向 stu_t 结构体的指针 { stu_t *pstumalloc(sizeof(stu_t)); if(NULLpstu) { printf(ERROR\n); return NULL; } strcpypstu-namename; pstu-idid; return pstu; } int main() { stu_t *pstu NULL; pstucreate_stu (ahsada,20); if(NULLpstu) { return -1; } show_stu(pstu); free(pstu);//手动释放内存 pstuNULL;// 释放后置空 return 0; }数据结构一组用来保存一种或多种特定关系的数据集合组织和存储数据。数据与数据之间的关系逻辑结构:数据元素与元素之间的关系集合:平等关系线性 结构:完素与元素之间一对一的关系(顺序表链表队列、t栈)树形结构:元素与元素之间一对多的关系(二叉树)图形结构:元素与元素之间多对多的关系(图)物理结构:数据元素在计算机内存中的存储方式顺序结构:选用一段连续的内存空间数组和链表的区别数组1.数据访问方便(o(1y )2.元素插入和册除需要移动人量数据,效率低3.予预分配内存空间链式结构:选用非连续的内存空间链表1数据访问需要遍历(o (n) )2.插入和删除元素方便3.不需要预分配;可以动态存储4.可以有效利用内存碎片内存碎片:一些游离的小的内存空间散列结杓哈希结构∶将要存储的数据的关键字和存储位置之间构建映射关系哈希函数〉﹔存储和誉找都粮据映射关系查找。为了提高数据的查找效率。索引存储:通关索引表寻找数据的存储位置。为了提高数据的查找效率。内存泄漏程序在申请内存后未能正确释放不再使用的内存空间的现象。这种现象会导致可用内存逐渐减少最终可能引发程序崩溃或系统性能下降链表创建列表Link_t *create_link(void) { Link_t *plink malloc(sizeof(Link_t)); if (NULL plink) { printf(ERROR\n); return NULL; } plink-phead NULL; plink-clen 0; return plink; }输出链表void show_link(Link_t *plink) { Node_t *ptmp plink-phead; while (NULL ! ptmp) { printf(%d, ptmp-data); ptmp ptmp-pnext; } printf(\n); }空链表的检查int is_empty_link(Link_t *plink) { if (NULL plink-phead) { return 1; } return 0; }头插int insert_link_head(Link_t *plink, Datatype_t data) { Node_t *pnode malloc(sizeof(Node_t)); //创建结点并保存数据 if (NULL pnode) { printf(error\n); return -1; } //初始化新节点数据 pnode-data data; pnode-pnext NULL; //连接新节点和原列表 pnode-pnext plink-phead; //让新节点指向原来的第一个节点 //读取 plink-phead 的旧值原来的第一个节点地址 plink-phead pnode; // phead保存新的头节点地址 //修改 plink-phead 为新值新节点的地址 // plink-phead它始终存储当前第一个节点的地址 // 更新链表长度 plink-clen; return 0; }尾插int insert_link_end(Link_t *plink, Datatype_t data) { Node_t *pnode malloc(sizeof(Node_t)); if (NULL pnode) { printf(ERROR\n); return -1; } pnode-data data; pnode-pnext NULL; if (is_empty_link(plink)) { plink-phead pnode; } else { //查找尾结点 Node_t *pend plink-phead; while (NULL ! pend-pnext) { pend pend-pnext; } pend-pnext pnode; } plink-clen; return 0; }删除第一个结点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); pfree NULL; plink-clen--; return 0; }删除最后一个结点int delete_link_end(Link_t *plink) { if (is_empty_link(plink)) { return 0; } else if (1plink-clen) { delete_link_head(plink); } else { Node_t*pfree plink-phead; while(pfree-pnext-pnext!NULL) { pfreepfree-pnext; } free(pfree-pnext); pfree-pnextNULL; plink-clen--; } return 0; }销毁函数void destroy_link(Link_t *plink) { while (!is_empty_link(plink)) { delete_link_head(plink); } free(plink); }内存泄漏检查valgrindGNU提供的一个内存错误检查软件
http://www.gsyq.cn/news/1382954.html

相关文章:

  • 整理录音证据总太慢写不完?专业整理对比评测告诉你方法
  • 从54M到300M:手把手教你用IxChariot搞定802.11n工业网关的极限吞吐量测试
  • 决战破晓手游官网下载:决战破晓最新官方下载渠道
  • ABAP实现OAuth 2.0 Authorization Code流程实战
  • 基于LRW-1000(CAS-VSR-W1k)数据集来进行中文唇语数据集识别任务以构建一个全面的唇语识别系统,包括数据集准备、模型定义、训练和结果评估
  • 超低功耗电池电压监控电路设计:从LM324到LPV324的硬件方案优化
  • League Akari:如何通过LCU API实现英雄联盟游戏流程的智能化管理?
  • 2026年GEO工具贴牌公司深度评测与选型避坑指南 - 品牌报告
  • Mercari煤炉被封如何解封?2026教程
  • 开发者视角:5 款垂直聚合导航网站的实用体验分享
  • 自制智能半导体测试仪:自动识别管脚与测量晶体管参数
  • 【Win11下的andrej-karpathy-skills 配置指南】22 万 Star 的极简项目,如何治好 AI 的「过度设计」
  • “烟花第一股”ST熊猫终止上市
  • 矩阵系统的五大核心能力拆解:从多平台管理到线索闭环的全链路实践
  • 告别默认动画!手把手教你为银河麒麟Kylin Linux打造个性化开机画面(附素材包)
  • Redis 入门必学:String 字符串类型完全指南
  • 从零开始的web前端开发11
  • 基于Arduino与PID算法的高精度智能温控器设计与实现
  • 10款主流网盘深度对比:不限速之外,哪款更适合长期当“主力盘”?
  • Navicat连接和SQL文件都丢了?用这个注册表备份还原法,5分钟搞定恢复
  • Mac鼠标滚轮卡顿终结者:3分钟让外接鼠标获得触控板般丝滑体验
  • 大厂 Java 面试翻车实录:面试官大战水货程序员谢飞机,3轮连环拷问从 Java 核心问到 DDD
  • 哪些降重方法对知网最新算法有效?实测5款工具,避开“降重后AIGC疑似率反而上升”的坑
  • 20252821 2025-2026-2 《网络攻防实践》第8周作业
  • 华为光猫配置解密工具终极指南:5分钟快速掌握配置解密全流程
  • ImageForge - 用对话的方式,打造专业图像处理工具
  • 小白也能秒懂!CSS三种定位方式,看完就能上手写
  • 软件项目管理(5):AI 辅助开发下的审查与上线门禁
  • 程序员第一次买 AI 会员:ChatGPT、Claude、Gemini、Grok 到底该怎么选
  • 告别安装失败:详解 Quartus 13.0 和谐过程中 sys_cpt.dll 与 license.dat 的那些坑