数据结构day2
目录
一、Makefile
二、检测内存泄漏工具:valgrind
2.1valgrind介绍
2.2具体使用:valgrind ./a.out
三、顺序存储的优缺点
3.1优点
3.2缺点
四、线性表的链式存储:
4.1链式存储简介
4.2关于单向链表的c语言描述
4.3单项列表的功能函数
一、Makefile
关于makefile介绍请查看这篇文章:
https://blog.csdn.net/weixin_72086349/article/details/148878718?spm=1001.2014.3001.5501
二、检测内存泄漏工具:valgrind
2.1valgrind介绍
Valgrind是一套开放源代码(GPL V2)的仿真调试工具集合,由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件(plug-in),利用内核提供的服务完成各种特定的内存调试任务。
Valgrind 是一个强大的内存调试和性能分析工具,广泛用于 Linux 系统上的程序开发和测试。它可以帮助开发者检测内存泄漏、数组越界、未初始化变量等问题,并提供详细的报告。Valgrind 支持多种编程语言,尤其是 C 和 C++。
Valgrind可以帮助开发者检测和修复程序中的内存问题和性能瓶颈。通过合理使用 Valgrind 的各种工具和选项,可以显著提高程序的质量和性能。
2.2具体使用:valgrind ./a.out
关键部分的解释
HEAP SUMMARY(堆内存总结):
in use at exit: 程序退出时,仍然占用的内存量。这里显示为56字节。
total heap usage: 堆内存的总使用情况,包括分配和释放的统计信息。
LEAK SUMMARY(泄漏总结):
definitely lost: 确定的内存泄漏。显示为56字节。
indirectly lost: 间接泄漏的内存。这是因为某些对象或数据结构被遗忘,导致它们无法被释放。
possibly lost: 可能泄漏的内存。Valgrind不能确定,但有可能丢失。
still reachable: 仍然可达的内存。内存尚未释放,但可以通过有效的指针访问。通常这不是泄漏,但可能表示内存管理不当。
suppressed: 被抑制的内存问题数量。
三、顺序存储的优缺点
3.1优点
1、无需为表中的逻辑关系增加额外的存储空间
2、可以快速随机访问元素O(1)
3.2缺点
1、插入,删除元素需要移动元素o(n)
2、无法动态存储。
四、线性表的链式存储:
4.1链式存储简介
内存上不是连续存储,解决顺序存储的缺点,插入和删除,动态存储问题程序运行起来之后需要多大空间开辟多大,编写时需要多大不确定。
特点:线性表链式存储结构的特点是一组任意的存储单位存储线性表的数据元素,存储单元可以是连续的也可以不连续。可以被存储在任意内存未被占用的位置上。所以在链式结构中还需要一个元素存储下一个元素的地址。
为了表示每个数据元素,ai与其直接后继数据元素ai+1之间的逻辑关系,对ai来说,除了存储其本身的信息外,还需要存一个指示器直接后续的信息。把存储元素信息的域叫数据域,把存储直接后继位置的域叫指针域。这两部分信息组成数据元素ai的存储映像,叫结点(Node);
4.2关于单向链表的c语言描述
typedef struct person {char name[32];char sex;int age;int score;
}DATATYPE;typedef struct node {DATATYPE data;struct node *next;
}LinkNode;typedef struct list {LinkNode *head;int tlen;int clen;
}LinkList;