栈的应用教学设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
栈的应用教学设计
根据上述优先关系表,可见21+44-3*6#中‘-’ <‘*’,‘*’ >‘#’。
2、算法基本思想
1)首先置‘#’为运算符栈的栈底元素, 操作数栈为空栈;
2) 依次读入表达式中各个字符,
如果判断为操作数则OPND栈,如21,44,进操作数栈;
若为运算符θ2,则和OPTR的栈顶元素θ1比较优先级,θ1和θ2进行比较。
当θ1 < θ2 ,θ2 进栈;
当θ1 = θ2 ,θ1 出栈;
若θ1 > θ2 ,θ1 出栈,先进行操作数求值;然后运算结果再进栈。
3、算法编程实现
OperandType EvaluateExpression ( )
{ InitStack(OPTR); push(OPTR,`#`);
InitStack(OPND);
read(w);
While NOT ((w=’#’)
AND (GetTop(OPTR)= `#`) )
[ IF w NOT IN op THEN
[ push(OPND,w); read(w);
ELSE CASE
Precede(GetTop(OPTR),w) OF
`<`:[ push(OPTR,c); read(w);]
`=`: [pop(OPTR,x);
if x=FUNCTION then
PUSH(OPND,x(POP(OPNE)));
read(w);]
`>`: [b:= pop(OPND);
a:= pop(OPND); [实例讲解]
1分钟
结合例题,讲解算法基本思想。
[动画演示]
1.5分钟
结合算法演示系统,重点讲解用栈求解表达式21+44-3*6的算法编程实现。
theta:= pop(OPTR);
push(OPND, Operate(a,theta,b));
]
ENDC; ]
RETURN( POP(OPND)) ENDF;
4、算法执行过程
# 21+44-3*6#
1)“#”先压入到运算符栈,即push(OPTR,`#`);
OPTR OPND
2)push(OPND,`21`)
2)‘#’ <‘+’,push(OPTR, `+` );
3)push(OPND,`44`)
4)‘*’ >‘-’,b:= pop(OPND);
a:= pop(OPND);
theta:= pop(OPTR);
即
b= 44; a=21;21+44=65;
push (OPND,`65`)
5)‘#’ <‘-’,push(OPTR, `-` );
6)push(OPND,`3`)
7)‘-’ <‘*’,push(OPTR, `*` );
8)push(OPND,`6`)
9)‘*’ >‘#’,b:= pop(OPND);
a:= pop(OPND);
theta:= pop(OPTR);
即
b= 3; a=6;3*6=18;
push (OPND,`18`)
10)‘-’ >‘#’,b:= pop(OPND);
a:= pop(OPND);
theta:= pop(OPTR);
即
b= 18; a=65; [动画演示]
1.5分钟
结合算法演示系统,讲解用栈求解表达式21+44-3*6的算法执行过程。