1、数据结构实验报告实验名称: 实验 2 栈和队列及其应用实验目的:通过上机实验,加深理解栈和队列的特性;能根据实际问题的需要灵活运用栈和队列;掌握栈和队列的应用。实验内容:(2 选 1)内容 1:算术表达式求值问题;内容 2:航空客运订票系统。实验要求:1)在 C+系统中编程实现;2)至少实现两种以上操作算法;3)写出算法设计的基本原理或画出流程图;4)算法实现代码简洁明了;关键语句要有注释;5)给出调试和测试结果;6)完成实验报告。 实验步骤: (1)算法设计为了实现算符优先算法。可以使用两个工作栈。一个称为 OPTR,用以寄存运算符,另一个称做OPND,用以寄存操作数或运算结果。1.首先置操
2、作数栈为空栈,表达式起始符”#”为运算符栈的栈底元素;2.依次读入表达式,若是操作符即进 OPND 栈,若是运算符则和 OPTR 栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即 OPTR 栈的栈顶元素和当前读入的字符均为”#” ) 。(2)算法实现typedef struct int stacksize; char *base; char *top; Stack;typedef struct int stacksize; int *base; int *top; Stack2;int InitStack(Stack *s) /构造运算符栈 s-base=(char *)ma
3、lloc(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) /判断字符是否
4、是运算符,运算符即返回 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; int Pop2(Stac
5、k2 *s) /删除操作数栈 s 的栈顶元素,用 p 返回其值 int p;s-top-; p=*s-top; return p;char GetTop(Stack s) /用 p 返回运算符栈 s 的栈顶元素 char p=*(s.top-1); return p; int GetTop2(Stack2 s) /用 p 返回操作数栈 s 的栈顶元素 int p=*(s.top-1); return p; char Precede(char c1,char c2) int i=0,j=0; static char array49=, , , , , , , , , , , , , , , , , , , , , , , , !, , , : theta=Pop( b=Pop2( a=Pop2( Push2(break; return GetTop2(OPND); 实验结果: