矩阵的压缩存储 若对一个n阶方阵A[1…n][1…n]中的任意一个元素aij都有aij=aji(1≤i,j≤n),则称其为对称矩阵。其中的元素可以划分为3个部分,即上三角区、主对角线和下三角区。在下三角矩阵中,上三角区的所有元素均为同一常量。其存储思想与对称矩阵类似,不同的是,只需要存储上三角区的常量一次。可以将下三角矩阵A[1…n][1…n]压缩存储在B[n(n+1)/2+1]中。三角矩阵形式如下图所示。
队列的应用——层次遍历、计算机系统 在信息处理时,有一类问题需要逐层或逐行处理。这类问题的解决方法往往是在处理当前层或当前行时就对下一层或下一行做预处理,把处理顺序安排好,等到当前层或当前行处理完毕,就可以处理下一层或下一行。使用队列可以保存下一步的处理顺序,例如在层次遍历二叉树时,遍历过程如下:1、根节点入队2、若队为空,结束遍历,否则重复33、队列中第一个结点出队并访问之。若其有左孩子,则将左孩子入队;若其有右孩子,则将右孩子入队,返回2
双链表、循环链表、静态链表 由循环单链表与单链表的关系可以推得循环双链表与双链表的关系。要访问某个结点的前驱结点(插入、删除操作时),只能从头开始遍历,访问后继结点的时间复杂度为O(1),访问前驱结点的时间复杂度为O(n)。双链表中的结点可以很方便的找到其前驱结点,因此,有时对单链表常做的操作是在表头和表尾进行的,此时对循环单链表不设头指针而。因为若设的是头指针,对表尾进行操作需要O(n)的时间复杂度,而若。双链表在单链表的结点中增加了一个指向其前驱的prior指针,因此。循环单链表的插入、删除算法与单链表的几乎一样,所不同的是
线性表的链式表示——单链表 线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。为了建立数据元素之间的线性关系,对每个链表结点除存放元素自身的信息外还需要存放一个指向其后继的指针。单链表节点结构如下图所示,其中data为数据域,存放数据元素;next为指针域,存放其后继结点的地址。利用单链表可以解决顺序表需要大量连续存储单元的缺点,但单链表附加指针域,也存在浪费存储空间的缺点。由于单链表的元素离散地分布在存储空间中,所以单链表时非随机存取的存储结构,即不能直接找到表中某个特定的结点。
线性表的顺序表示 线性表的顺序存储又称顺序表。是用一组地址连续的存储单元一次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。第1个元素存储在线性表的起始位置,第i个元素的存储位置后面紧接着存储的是第i+1个元素,称i为元素ai在线性表中的位序。因此,顺序表的特点是表中元素的逻辑顺序与其物理顺序相同。每个数据元素的存储位置都和线性表的起始位置相差一个和该数据元素的位序成正比的常数,因此,线性表中的任一数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。