算法与数据结构栈与队列实验报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

实验二栈和队列实现四则运算

实用文档

实验二栈和队列实现四则运算

一、实验目的及要求:

1、掌握栈和队列的基本操作:建立、插入、删除、查找、合并

2、掌握用栈和队列的储存

3、熟悉C语言上机编程环境

4、掌握编译、调试程序的方法

二、实验内容:

采用栈进行表达式的求值,表达式求值是程序设计语言编译中的一个最基本问题。它的实现是栈应用的又一个典型例子,本报告使用的是“算符优先法”求表达式的值。

要把一个表达式翻译成正确求值的一个机器指令序列,或者直接对表达式求值,首先要能够正确解释表达式。若要正确翻译则首先要了解算术四则运算的规则。即:

(1)、先乘除,后加减;

(2)、从左算到右;

(3)、先括号内后括号外。

任何一个表达式都是由操作数、运算符和界限符组成的,我们称它们为单词。一般地,操作数既可以是常数也可以是被说明为变量或常量的标识符;运算符可以分为算术运算符、关系运算符和逻辑运算符3类;基本界限符有左右括号和表达式结束符等。为了叙述的简洁,我们仅讨论简单算术表达式的求值问题。这种表达式只包含加、减、乘、除4种运算符。

我们把运算符和界限符统称为算符,它们构成的集合命名为OP。根据上述3条运算规则,在运算的每一步中,任意两个相继出现的算符和之间的优先级之多是以下3种关系之一:

的优先级低于

的优先级等于

的优先级高于

根据实际情况推导出如下的优先关系

算符间的优先关系表

+

-

*

/

#

+

-

*

/

#

=

有规则(3),+、-、*和/为时优先性均低于“(”但高于“),”由规则(2),当时,令,“#”是表达式的结束符。为了算法简洁,在表达式左右括号的最左边也虚设了一个“#”构成整个表达式的一对括号。表中的“(”=“)”表示当左右括号相遇时,括号内的运算已经完成。同理,“#”=“#”表示整个表达式求值完毕。“)”与“(、“#”与“)”以及“(”与“#”之间无优先级,这是因为表达式中不允许它们相继出现,一旦遇到这种情况,则可以认为出现语法错误。

为实现算符优先算法,可以使用两个栈。一个称作OPTR,用以寄存运算符;另一个称作OPND,用以寄存操作数户哟运算结果。算法的基本思想是:

(1)首先输入一个表达式,用一数组记录;

(2)置操作数栈为空栈,表达式起始符“#”为运算符栈的栈底元素;

(3)依次读入表达式中的每个字符,若是操作数则进OPND栈,若是运算符则和OPTR栈的栈顶元素比较优先权后作相应操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为“#”)。

三、程序代码

#includestdio.h

#includestdlib.h

#includestring.h

#defineerror0//错误标志

#defineok1//正确标志

#defineoverflow-1//溢出标志

#defineStack_Size100//一般表达式运算符和运算数不会很长,100足够用

#defineOP_Size7//一共7种运算符

charOP[OP_Size]={+,-,*,/,(,),#};//运算符

unsignedcharPrior[7][7]={

,,,,,,,

,,,,,,,

,,,,,,,

,,,,,,,

,,,,,=,,

,,,,,,,

,,,,,,=

};//算符间的优先关系

templatetypenameT

structSqStack

{

T*top;

T*base;

intstacksize;

};//顺序栈结构模板

templatetypenameT1,typenameT2

intInitStack(T1S)

{

S.base=(T2*)malloc(Stack_Size*sizeof(T2));

if(!S.base)exit(overflow);

S.top=S.base;

S.stacksize=Stack_Size;

returnok;

}//初始化栈函数模板

templatetypenameT1,typenameT2

intPush(T1S,T2e)

{

if(S.top-S.base=S.stacksize)

{

S.base=(T2*)realloc(S.base,(S.stacksize+1)*sizeof(T2));

if(!S.base)exit(overflow);

S.top=S

文档评论(0)

+ 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档