版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sd4567855/article/details/88077005
【算法笔记】第七章:数据结构专题
标签(空格分隔):【算法笔记】
第七章:数据结构专题
文章目录
7.1 栈的应用
7.2 队列的应用
7.3 链表处理
7.3.1 链表的概念
数组:内存中取出一块连续的地址来存放给定长的数组。
链表:使用若干个结点组成,且结点在内存中的位置是不连续的。
struct node{
typename data;//数据域
node* next;//指针域
}
链表以是否存在 头结点 分为 带头节点的链表 和 不带头节点的链表。
7.3.2 使用malloc函数或者new运算符为链表结点分配内存空间
malloc 函数:
typename* p = (typename*) malloc( sizeof( struct typename));
解释:左侧的(typename*)
是强制转换;malloc函数申请了一块大小为sizeof(node)的空间,并且返回了这块空间的指针(此时该指针是一个未确定的指针void*)
new 运算符:
new是 C++中用来申请动态空间的运算符,其返回类型同样是申请的同变量类型的指针,基本用法如下:
typename* p = new typename;
内存泄漏:
如果用malooc 或者 new 开辟出来的空间在使用后没有释放,则会导致其程序运行结束之前一直占据该内存空间。这样很有可能导致内存消耗过快以至于最后无内存可分配。
因此,使用完malloc之后,应该使用free函数来释放空间;使用完new之后,要使用delete来释放空间。
7.3.3 链表的基本操作
- 创建链表:头插法、尾插法
- 查找元素
- 插入元素
- 删除元素
7.3.4 静态链表
静态链表实现的原理是hash,通过建立一个结构体数组,并令数组的下标直接访问结点的地址
注意:静态链表不需要头节点。