《数据结构》实验报告 ◎实验题目: 栈的应用。 ◎实验目的:熟悉掌握对栈的应用和基本操作。 ◎实验内容:用算符优先法对算术表达式求值。 一、需求分析 通过程序设计实现算符优先法: 1 以字符串的形式输入整形数据和运算符号; 2、输出算术表达式的结果; 3、实现简单的一位整型数据的算术运算; 4、测试数据:算术表达式,其中的整型数据均只有一位。 二 概要设计 1.基本操作 void InitStack(SqStack *s) 操作结果:栈的初始化。 int GetTop(SqStack *s) 初始条件:栈已存在且不空; 操作结果:将栈顶元素返回。 void Push(SqStack *s,int e) 初始条件:栈已存在; 操作结果:插入 e 作为新的栈顶元素。 char Pop1(SqStack *s) 初始条件:运算符栈已存在且不空; 操作结果:栈顶元素出栈。 int Pop2(SqStack *s) 初始条件:运算数栈已存在且不空; 操作结果:栈顶元素出栈。 char precede(char A, char B) 操作结果:比较两个算符的优先级,并将比较结果返回。 int In(char Test) 操作结果:判断字符是否是运算符。 int EvaluateExpression() 操作结果:通过调用一系列的函数,对表达式求值。 main() 操作结果:主要通过调用函数EvaluateExpression 得到最终结果。 2.本程序包含两个模块: (1)构造栈的模块; (2)主程序模块; (三) 详细设计 1.声明,栈的结构体和判断运算符优先级的表格(以数组形式表达): typedef struct { int *base; int *top; int stacksize; }SqStack; #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define overflow 1 #define error 0 char OPSET[7]={'+' , '-' , '*' , '/' ,'(' , ')' , '#'};//运算符种类 unsigned char Prior[7][7] = { // 算符间的优先关系 '>','>','<','<','<','>','>', '>','>','<','<','<','>','>', '>','>','>','>','<','>','>', '>','>','>','>','<','>','>', '<','<','<','<','<','=',' ', '>','>','>','>',' ','>','>', '<','<','<','<','<',' ','=' }; 2.各个函数的详细设计: void InitStack(SqStack *s)//栈的初始化 { s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)); if(!s->base) exit(error); //存储分配失败 s->top=s->base; s->stacksize=STACK_INIT_SIZE; } int GetTop(SqStack *s)//若运算符栈不空则用 e 返回...