栈的应用教学设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的算法执行过程。

相关文档
最新文档