重要概念
1. 在栈的ADT定义中,除初始化操作外,其他基本操作的初始条件都要求栈已存在。
2. 栈是操作受限(或限定仅在表尾部进行插入和删除操作)的线性表,其运算遵循的是先进后出原则。
3. 堆栈是一种操作受限的线性表,它只能在线性表的一端进行插入和删除操作,对栈的访问是按照先进后出的原则进行的。
4. 向栈中压入元素的操作是先进栈,后退栈。
5. 当两个栈共享一存储区时,栈利用一维数组stack(1,n)表示,两栈顶指针为top[1]与top[2],则当栈1空时,top[1]为0,top[2]为n+1,栈满时为top[1]+1=top[2]。
6. 两个栈共享空间时栈满的条件为两栈顶指针值相减的绝对值为1(或两栈顶指针相邻)。
7. 在进行入栈运算时应先判断栈是否满;在进行出栈运算时应先判断栈是否为空;当栈中元素为n个,作进栈运算时发生上溢时,则说明该栈的最大容量为n。为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享的一片连续的空间时,应将两个栈的栈底分别设置在内存空间的两端,这样只有当两栈顶指针值相减的绝对值为1(或两栈顶指针相邻)时才产生溢出。
8. 多个栈共享时,最好使用链式存储结构作为存储结构。
9. 队列又称作先进先出表。
10. 队列的特点是先进先出。
11. 在具有n个元素的非空队列中插入一个或者删除一个元素的操作时间复杂度为O(1)
12. 循环队列是一种顺序(物理)结构。
13. 循环队列的目的时为了解决假溢出时大量移动数据元素。
14. 区分循环队列的满与空,只有两种方法,它们是牺牲一个存储单元,设标记(设计数器等方法)。
15. 用循环队列表示队列的长度为n,若只设头指针,则出队和入队的时间复杂度分别是O(1)和O(n);若只设置尾指针,则出队和入队的时间复杂度分别是O(1)和O(1)。