while(ch!=EOF) {
while(ch!=EOF && ch!=‘\n’) {
switch(ch) {
case ‘#’: Pop(S, ch);
break;
case ‘@’: ClearStack(S); break;
default: Push(S, ch); break;
}
ch=getchar();
只须证明,若借助栈由输入序列(1,2,…,n)得到输出序列
(p1,p2,…,pn),那么在输出序列中,不可能出现这种情况:存 在i<j<k,使pj<pk<pi. 这里(p1,p2,…,pn)是(1,2,…,n)的一个全排 列,每个元素只能按1,2,…,n的次序进一次栈。
提示
2020/12/12
i<j<k说明进栈顺序为(…i…j…k…),它们的出 栈排列只有6种可能:
}
ClearStack(S);
if(ch!=EOF) ch=getchar();
}
DestroyStack(S);
} 2020/12/12
12
栈的应用:迷宫求解
东南西北 (顺时针)
演示
2020/12/12
13
迷宫求解策略
求迷宫中一条路径的算法的基本思想是:
若当前位置"可通",则纳入"当前路径",并继续朝"下一位置“
a2
栈底
a1
2020/12/12
2
栈的基本操作
1.初始化栈:IniStack(&S) 将栈S置为一个空栈(不含任何元素)。
注意这两个 操作的区别
2.进栈:Push(&S,X)