CHAPTER 2 线性表
顺序存储与链式存储的比较:
1.存取方式
2.逻辑结构与物理结构
3.查找、插入、删除操作
按值查找: 顺序表无序时O(n),有序时可二分查找O(log2n)
链式存储O(n)
按序号查找:顺序表O(1)
链式存储O(n)
插入、删除时顺序表平均移动半个表长的元素
4.空间分配 静态的顺序表空间不能修改
CHAPTER 3 栈、队列、数组
共享栈:两个顺序栈共享一个一维数组空间
优点:有效利用存储空间,对存取效率没有影响
顺序存储会出现“假溢出”现象
区分循环对列是否满的三种方法
EnQueue时总是在front指向的那个位置插入,2、3种情况front和rear指向一个地方,这个地方存储的是front的元素
1.牺牲一个存储空间 rear总是指向空位置
2.设置size变量
3.应用Tag Q.tag的初始值为0,EnQueue时设tag为1,DeQueue时设tag为0
当rear == front时,如果tag == 0则是空对列,tag == 1则是满对列
栈和队列的应用
1.栈 括号匹配{[][[]]}})}}
2.栈 表达式求值
后缀表达式求结果&后缀转中缀:从左往右压栈退栈
前缀表达式求结果&前缀转中缀:从右往左压栈退栈
中缀表达式转后缀表达式手算:先标出每个运算符的计算顺序(左优先),再依次转换
中缀表达式转前缀表达式手算:右优先标出运算符的计算顺序,再依次转换
前缀表达式:波兰式
后缀表达式:逆波兰式
3.栈 递归
递归概念:在一个函过程或数据结构的定义中有应用了他自身,则称这个函数、过程或数据结构是递归定义的
递归的精髓在于能否将原始问题转换为属性相同但规模较小的问题(斐波那契求和)
递归算法的效率通常要低
使用栈来实现递归函数的非递归运算:
4.队列 层次遍历
5.队列 计算机系统中的应用
解决了主机与外部设备之间速度不匹配的原因
构建输入输出缓冲队列
解决由多用户引起的资源竞争问题
构建资源等待队列
多维数组:行优先存储、列优先存储
矩阵的压缩存储
压缩存储:为多个值相同的元素之分配一个空间,对0元素不分配空间
1.对称矩阵:只记录上三角或者下三角,并放在一位数组中(数组标号与ij的转换!!)
2.三角矩阵:与对称矩阵一样
3.三对角矩阵:[an-1,n an,n an+1,n]
4.稀疏矩阵 重点:三元组(行,列,值)的存储!
可用数组or十字链表法存储
稀疏矩阵压缩存储后失去了随机存取的特性