数据结构与算法实验任务书2014-S3.docVIP

  • 15
  • 0
  • 约4.64千字
  • 约 7页
  • 2016-09-30 发布于江西
  • 举报
数据结构与算法实验任务书2014-S3.doc

实验3 栈 和 队 实验室: DJ2-204 实验日期: 2014年4月4日星期五 周次:第6周 班 级: 12计科3 学号姓名:张翔 一、开发环境及工具: 软件环境: 硬件环境: 二、你的选题: 选题1: 算术表达式的求值 选题2: 迷宫问题 选题3: 停车场管理 选题4: 可以实现多种进制转换和四则运算的计算器 也可以选择自拟题,经过老师同意后使用 三、实验目的:(请自己填写,不少于50字) (提示:通过……实验掌握……、熟练……、了解……) 通过编写程序来求表达式求值实验掌握了队和栈的应用,熟练的掌握了如何解决问题并实现。了解了栈和队的特点和应用 四、存储结构说明和定义: 基本操作: InitStack(S) 操作结果:构造一个空栈S。 GetTop(S) 初始条件:栈S已存在。 操作结果:用P返回S的栈顶元素。 Push(S,ch) 初始条件:栈S已存在。 操作结果:插入元素ch为新的栈顶元素。 Pop(S) 初始条件:栈S已存在。 操作结果:删除S的栈顶元素。 In(ch) 操作结果:判断字符是否是运算符,运算符即返回1。 Precede(c1, c2) 初始条件:c1,c2为运算符。 操作结果:判断运算符优先权,返回优先权高的。 Operate(a,op,b) 初始条件:a,b为整数,op为运算符。 操作结果:a与b进行运算,op为运算符,返回其值。 num(n) 操作结果:返回操作数的长度。 EvalExpr() 初始条件:输入表达式合法。 操作结果:返回表达式的最终结果。 }ADT Stack 五、主要算法: 给出程序的概要设计或流程图,给出核心函数的算法,给出每个子函数的函数头。 1.表达式求值 #include stdio.h #include stdlib.h #include string.h #define NULL 0 #define OK 1 #define ERROR -1 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 20 /* 定义字符类型栈 */ typedef struct{ int stacksize; char *base; char *top; } Stack; /* 定义整型栈 */ typedef struct{ int stacksize; int *base; int *top; } Stack2; /* ----------------- 全局变量--------------- */ Stack OPTR;/* 定义运算符栈*/ Stack2 OPND; /* 定义操作数栈 */ char expr[255] = ; /* 存放表达式串 */ char *ptr = expr; int InitStack(Stack *s) //构造运算符栈 { s-base=(char *)malloc(STACK_INIT_SIZE*sizeof(char)); if(!s-base) return ERROR; s-top=s-base; s-stacksize=STACK_INIT_SIZE; return OK; } int InitStack2(Stack2 *s) //构造操作数栈 { s-base=(int *)malloc(STACK_INIT_SIZE*sizeof(int)); if(!s-base) return ERROR; s-stacksize=STACK_INIT_SIZE; s-top=s-base; return OK; } int In(char ch) //判断字符是否是运算符,运算符即返回1 { return(ch==+||ch==-||ch==*||ch==/||ch==(||ch==)||ch==#); } int Push(Stack *s,char ch) //运算符栈插入ch为新的栈顶元素 { *s-top=ch; s-top++; return 0; } int Push2(Stack2 *s,int ch)//操作数栈插入ch为新的栈顶元素 { *s-top=ch; s-top++; return 0; } char Pop(Stack *s) //删除运算符栈s的栈顶元素,用p返回其值 { char p; s-top--; p=*s-top; return p; } in

文档评论(0)

1亿VIP精品文档

相关文档