严蔚敏视频 笔记07
习题课后思考题
1.2 1.3 1.4 2.4.2.5.2.8 2.9 3.2 3.6 3.8 3.12 3.15 4.2 4.4 4.7 4.11
问题的解决
例一 数制转换
算法基于原理:N = (N div d) * d + N mod d
十进制转八进制
void conversion() {
InitStack(S);
scanf("%d",n);
while(N) {
Push(S,N % 8);
N=N/8;
}
while(!StackEmpty(S)) {
Pop(S,e);
printf("%d",e);
}
}
例二 括号匹配的检验
() [] {}
“期待的急迫程度”
[ ( [ ] [ ] } ]
1 2 3 4 5 6 7 8
三种不正确的情形:
到来的右括弧不是所“期待”的
到来的是“不速之客”
直到结束也没到来所“期待”的
算法设计思想:
1.凡出现左括弧则进栈
2.凡出现右括弧,首先检查栈是否空
若栈空则表明右括弧多了
否则和栈顶元素比较
若相匹配则左括弧出栈
否则不匹配
3.表达式检验结束时
若栈空则匹配正确
否则表明左括弧多了
Status matching(string& exp);
例三 行编辑程序问题
无光标
输入缓冲区 接受一行字符 逐行存储
假设 退格符 # 退行符@
缓冲区用栈来实现
例四 迷宫求解
通常是“穷举求解”
当前位置
探索 下一位置
顺时针方位 还不能往回走
记录下路径
求解基本思想:
1.若当前位置“可通”,纳入路径,继续前进
2.若当前位置“不可通”,则后退,换向探索
3.若四周均“不可通”,则从路径中删除