资源描述:
《栈与队列的实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划栈与队列的实验报告 实验二栈和队列实现四则运算 一、实验目的及要求: 1、掌握栈和队列的基本操作:建立、插入、删除、查找、合并 2、掌握用栈和队列的储存3、熟悉C语言上机编程环境4、掌握编译、调试程序的方法 二、实验内容: 采用栈进行表达式的求值,表达式求值是程序设计语言编译中的一个最基本问题。它的实现是栈应用的又一个典型例子,本报告使用的是“算符优先法”求表达式的值。 要把一个表达式翻译成正
2、确求值的一个机器指令序列,或者直接对表达式求值,首先要能够正确解释表达式。若要正确翻译则首先要了解算术四则运算的规则。即: 、先乘除,后加减;、从左算到右;、先括号内后括号外。目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划 任何一个表达式都是由操作数、运算符和界限符组成的,我们称它们为单词。一般地,操作数既可以是常数也可以是被说
3、明为变量或常量的标识符;运算符可以分为算术运算符、关系运算符和逻辑运算符3类;基本界限符有左右括号和表达式结束符等。为了叙述的简洁,我们仅讨论简单算术表达式的求值问题。这种表达式只包含加、减、乘、除4种运算符。 我们把运算符和界限符统称为算符,它们构成的集合命名为OP。根据上述3条运算规则,在运算的每一步中,任意两个相继出现的算符系之一: ?1和?2之间的优先级之多是以下3种关 ?1??2?1的优先级低于?2?1??2?1的优先级等于?2?1??2?1的优先级高于?2 根据实际情况推导出如下的优先关系 算符间的
4、优先关系表 有规则,+、-、*和/为?1时优先性均低于“,”由规则,当?1??2 时,令?1??2,“#”是表达式的结束符。为了算法简洁,在表达式左右括号的最左边也虚设了一个“#”构成整个表达式的一对括号。表中的“”表示当左右括号相遇时,括号内的运算已经完成。同理,“#”=“#”表示整个表达式求值完毕。“)”与“”以及“首先输入一个表达式,用一数组记录; 置操作数栈为空栈,表达式起始符“#”为运算符栈的栈底元素; 依次读入表达式中的每个字符,若目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨
5、大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划是操作数则进OPND栈,若是运算符则和OPTR栈的栈顶元素比较优先权后作相应操作,直至整个表达式求值完毕。 三、程序代码 #include#include#include #defineerror0//错误标志#defineok1//正确标志#defineoverflow-1//溢出标志 #defineStack_Size100//一般表达式运算符
6、和运算数不会很长,100足够用#defineOP_Size7//一共7种运算符 charOP[OP_Size]={'+','-','*','/','(',')','#'};//运算符unsignedcharPrior[7][7]={'>','>','','>','>','>','','>','>','>','>','>','','>','>','>','>','>','','>','','>','>','>','','>','>','structSqStack{ T*top;T*base;intstacksize;
7、 };//顺序栈结构模板 templateintInitStack(T1&S){ =(T2*)malloc(Stack_Size*sizeof(T2));if(!)exit(overflow);=; =Stack_Size;returnok;}//初始化栈函数模板 templateintPush(T1&S,T2e){ if(>=){目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。为了适应公司新战略的发展,保障停车场安保新项目的正常、顺
8、利开展,特制定安保从业人员的业务技能及个人素质的培训计划 =(T2*)realloc(,(+1)*sizeof(T2));=+; +=1;} *++=e;returnok;}//入栈函数模板 templateintPop(T1&S,T2&e){ if(==)returnerror;e=*--;returno