王道408---DS---线性表、栈、队列与数组
错题2.2
1、题目中提到在第i个位置一般是指在下表为i的位置
2、线性表元素的序号是从1开始,而在第n+1个位置插入相当于在表尾追加。
静态链表
树的双亲表示法就是使用了这种思想吧
卡特兰数
\[\text{}\frac1{n+1}C_{2n}^{n}
\]
栈的数学性质:n个不同元素进栈,出栈元素不同排列的个数为卡特兰数
栈的初始化与判空判满操作
栈空判断的条件就是 S.top = = -1,栈满的条件是S.top==MaxSize-1
共享栈
共享栈的判空: 对于top0,top0=-1时,0号栈空,top1=MaxSize时1号栈空
判满: top1-top0 = 1
队列的判空判满方法
双端队列
注意,对于通向的 "插入" "删除" 类似于栈,而对于不同向的"插入" "删除"才类似于队列
栈的应用
中缀表达式快速转逆波兰式(后缀表达)---方法一
最原始的方法
只看上面这一种解法难免会有些疑惑
推荐看下面这个
https://zq99299.github.io/dsalg-tutorial/dsalg-java-hsp/05/05.html
需要注意的是
1、当遇到同优先级的符号也会从栈里弹出,比如 + -
2、运算数据是遇到一个就放入栈里,并且不会弹出,弹出的只有运算符号,准确来说,运算数据就不用放在栈里。
3、如果最后还有两个运算符,则按栈依此弹出
如:
a+bc+(de+f)g
最后变为: abc+def+g+
中缀表达转后缀表达---方法二
另外记录中缀表达快速转前缀/后缀表达
https://www.cnblogs.com/lordtianqiyi/p/17606338.html
中缀表达转后缀表达---方法三
直接根据中序生成树,再进行后序遍历
这个方法看似比较麻烦,实际上一试就会发现相当easy!!!
很推荐第三种方法,因为前两种可能一不小心就失误了,尤其是第一种
稀疏矩阵
稀疏矩阵的存放一般采用三元组
难题3.1
p64-T7
注意这里是只有指针,没有结点