特性 | 设计思想一 (最常考) | 设计思想二 |
---|---|---|
指针含义 | 指向栈顶元素 | 指向下一个空闲位置 |
栈1初始化 top1 |
-1 |
0 |
栈2初始化 top2 |
MAXSIZE |
MAXSIZE-1 |
栈1入栈 Push(S, x) |
S[++top1] = x; |
S[top1++] = x; |
栈2入栈 Push(S, x) |
S[--top2] = x; |
S[top2--] = x; |
栈1判空 | top1 == -1 |
top1 == 0 |
栈2判空 | top2 == MAXSIZE |
top2 == MAXSIZE-1 |
栈满条件 | top1 + 1 == top2 |
top1 > top2 |
-
核心记忆: 牢牢记住思想一的所有细节,包括初始化、入栈/出栈操作和
top1 + 1 == top2
的判满条件。这是99%的考题所基于的模型。 -
审题是关键: 考试时,不要上来就写
top1 + 1 == top2
。一定要先看清题目给出的数据结构定义和初始化条件。如果题目给出了一个非主流的初始化(如思想二),那就必须按照该设定来分析。 -
现场推导能力: 防止被“变种题”迷惑的最佳方法,不是去背诵所有可能的情况,而是理解判满的本质——空间耗尽。在草稿纸上画一个数组,模拟一两次入栈操作,观察指针的变化,就能轻松推导出正确的判满条件。这比死记硬背更可靠。
-
易错点:
-
混淆
top1 + 1 == top2
和top1 == top2 - 1
。记住是栈1的下一个位置(top1+1
)撞上了栈2的当前位置(top2
)。 -
数组大小为
MAXSIZE
,下标却是0
到MAXSIZE-1
。在计算top2
初始值时要小心。
-