看了考研的数据结构书,发现之前有一些关于栈和队列的遗漏的知识点,现在补充一下。
1、栈的数学性质-卡特兰数
当n个元素以某种顺序进栈,并且可以在任意时刻出栈时,所获得的元素排列的树木N恰好满足Catalan()的计算,即N=C(n,2n)/(n+1)
有关卡特兰数的概念,可以参考之前我整理过的一篇文章://www.greatytc.com/p/dfb1d00bcf5e
2、循环队列
循环队列中,队首指向第一个元素的前一个位置,队尾指向最后一个元素的位置。
队空的条件:rear==front
队满的条件:(rear +1)% (maxSize)==front
3、共享栈
相比于普通的顺序栈,共享栈主要是为了提高内存的利用率和减少溢出的可能性而设计的。当两个栈共享共享一片连续的内存空间时,应将两栈的栈底分别设在这片内存空间的两端,这样当两个栈的栈顶在栈空间的某一位置相遇时,才产生上溢。
4、双端队列
双端队列是一种插入和删除操作在两端均可进行的线性表。可以把双端队列看成栈底连在一起的两个栈,它们与两个栈共享存储空间的共享栈不同之处是,两个栈的栈顶指针是向两端延伸的。由于双端队列允许在两端插入和删除元素,所以需要设立两个指针:end1和end2,分别指向双端队列中的两端的元素。
允许在一端进行插入和删除,另一端只允许删除的双端队列成为输入受限的双端队列,而允许在一端进行插入和删除,另一端只允许插入的双端队列成为输出受限的双端队列。
5、栈的应用-后缀表达式
栈的一个很重要的应用就是后缀表达式,有关后缀表达式的如何写参照我之前的一个博文://www.greatytc.com/p/8b38f61693b9。
之前以为只有加减乘除可以出现,其实关系运算符和逻辑运算符也可以出现的,这里要注意她们的优先级,关系运算符的优先级是要高于逻辑运算符的。