郝斌版《数据结构》学习笔记
时间:2015.08.31 - 2015.09.05
线性结构和非线性结构
逻辑结构
线性:数组,链表
栈(链表)和队列(数组,也可以用链表实现)是一种特殊的线性结构
非线性:树,图
物理结构
内存,是线性一维的
连续存储【数组】
数组:元素类型相同,大小相等。
离散存储【链表】
链表:n个节点离散分配;
彼此通过指针相连;
每个节点只有一个前驱节点,一个后续节点;
首节点没有前驱节点,尾节点没有后续节点。
专业术语:首节点(第一个有效节点,存放有效数据的节点),尾节点,头节点(首节点之前的那个节点,与首节点的数据类型一样,无有效数据,不保存有效节点的个数,加
头节点方便对链表进行操作),头指针(存放头节点的地址,指向头节点的指针变量),尾指针。
通过函数对链表进行处理所需要的参数:
只需要:头指针,则可以推算出其它所参数
单链表
双链表:每一个节点有两个指针域(指向前面的,指向后面的)
循环链表:能通过任何一个节点找到其它所有的节点(后面的找到前面的)
非循环链表
算法:
遍历
查找
清空
销毁
求长度
排序
删除节点
插入节点
插入:
第一种形式:r = p->pNext; p->pNext = q; q->pNext = r.
第二种形式:q->pNext = p->pNext; p->pNext = q; //q->pNext表示q指针指向的p节点结构体变量中的pNext成员
删除(指向下一节点即可,先临时定义一个指向p后面节点的指针r):
r = p->pNext; p->pNext = p->pNext->pNext;(等同于p->pNext = r->pNext;)
free(r); //要手动释放内存
线性结构的常见应用一:栈
线性结构的常见应用二:队列
数据结构: