王道408---DS---线性表、栈、队列与数组

错题2.2

img
1、题目中提到在第i个位置一般是指在下表为i的位置
2、线性表元素的序号是从1开始,而在第n+1个位置插入相当于在表尾追加。

静态链表

img
img
树的双亲表示法就是使用了这种思想吧

卡特兰数

\[\text{}\frac1{n+1}C_{2n}^{n} \]

栈的数学性质:n个不同元素进栈,出栈元素不同排列的个数为卡特兰数

栈的初始化与判空判满操作

image-20231006151231380

栈空判断的条件就是 S.top = = -1,栈满的条件是S.top==MaxSize-1

共享栈

image-20231006151035009

共享栈的判空: 对于top0,top0=-1时,0号栈空,top1=MaxSize时1号栈空

判满: top1-top0 = 1

队列的判空判满方法

image-20231006151904086

双端队列

img
img
注意,对于通向的 "插入" "删除" 类似于栈,而对于不同向的"插入" "删除"才类似于队列

栈的应用

中缀表达式快速转逆波兰式(后缀表达)---方法一

最原始的方法

img

只看上面这一种解法难免会有些疑惑

推荐看下面这个

https://zq99299.github.io/dsalg-tutorial/dsalg-java-hsp/05/05.html

需要注意的是

1、当遇到同优先级的符号也会从栈里弹出,比如 + -

2、运算数据是遇到一个就放入栈里,并且不会弹出,弹出的只有运算符号,准确来说,运算数据就不用放在栈里。

3、如果最后还有两个运算符,则按栈依此弹出
如:
a+bc+(de+f)g
最后变为: abc
+def+g+

中缀表达转后缀表达---方法二

image-20231010090340740

另外记录中缀表达快速转前缀/后缀表达
https://www.cnblogs.com/lordtianqiyi/p/17606338.html

中缀表达转后缀表达---方法三

image-20231010090437586

直接根据中序生成树,再进行后序遍历

这个方法看似比较麻烦,实际上一试就会发现相当easy!!!

很推荐第三种方法,因为前两种可能一不小心就失误了,尤其是第一种

稀疏矩阵

稀疏矩阵的存放一般采用三元组

image-20231006152820691

难题3.1

p64-T7

image-20231006150801155

注意这里是只有指针,没有结点

posted @ 2023-10-12 17:29  TLSN  阅读(53)  评论(0编辑  收藏  举报