北理工自动化数据结构试验报告2
数据结构与算法设计数据结构与算法设计 实验报告实验报告 实验二实验二 1 / 16 一、实验目的一、实验目的 按照四则运算加、减、乘、除、幂()和括号的优先关系和惯例,编写计算器程序。 二、实验内容二、实验内容 简单计算器。 请按照四则运算加、减、乘、除、幂( )和括号的优先关系和惯例,编写计算器程序。 要求 ① 从键盘输入一个完整的表达式,以回车作为表达式输入结束的标志。 ② 输入表达式中的数值均为大于等于零的整数。 中间的计算过程如果出现小数也只取 整。 例如,输入42*5输出14 输入42*2-10输出-48 三、程序设计三、程序设计 概要设计概要设计 1 1、宏定义、宏定义 define TRUE 1 define FALSE 0 define OK 1 define ERROR 0 2 2、基本函数、基本函数 (1)void InitStack_charSqStack *S char 型栈初始化 (2)void InitStack_intsqStack *S int型栈初始化 (3)void Push_charSqStack *S,char ch char型元素进栈 (4)void Push_intsqStack *S,int num int型元素进栈 (5)char GetTop_charSqStack *S 取char型栈顶元素 2 / 16 (6)int GetTop_intsqStack *S 取int型栈顶元素 (7)Status Inchar c 判断是否为运算符,若是运算符则返回,否则返回 (8)char Precedechar a,char b 判断两运算符的先后次序 (9)Status Pop_charSqStack *S,char struct node *next; }node; typedef struct { struct node *base; struct node *top; }SqStack; typedef struct lnode //构造 int 型栈 4 / 16 { int num; struct lnode *next; }lnode; typedef struct { struct lnode *base; struct lnode *top; }sqStack; 操作部分操作部分 void InitStack_charSqStack *S { S-base node *mallocsizeofnode; S-base-nextNULL; S-top S-base; } //char型栈初始化 void InitStack_intsqStack *S { S-base lnode *mallocsizeoflnode; S-base-nextNULL; S-top S-base; } //int型栈初始化 void Push_charSqStack *S,char ch { node *p; pnode*mallocsizeofnode; p-chch; p-nextS-top; 5 / 16 S-topp; } //char型元素进栈 Status Push_intsqStack *S,int num { lnode *p; plnode*mallocsizeoflnode; p-numnum; p-nextS-top; S-topp; return OK; } //int型元素进栈 char GetTop_charSqStack *S { return S-top-ch; } //取char型栈顶元素 int GetTop_intsqStack *S { return S-top-num; } //取int型栈顶元素 Status Pop_charSqStack *S,char node *p; pS-top; xp-ch; 6 / 16 S-topp-next; freep; return OK; } //char型栈出栈 Status Pop_intsqStack *S,int lnode *p; pS-top; xp-num; S-topp-next; freep; return OK; } //int型栈出栈 计算功能计算功能 int Operateint a,char theta,int b { int i,z 1; switchtheta { case z a b;break; case -z a - b;break; case *z a * b;break; case /z a / b;break; case fori 1;ibase node *mallocsizeofnode; S-base-nextNULL; S-top S-base; } //char型栈初始化 void InitStack_intsqStack *S { S-base lnode *mallocsizeoflnode; S-base-nextNULL; S-top S-base; } //int型栈初始化 void Push_charSqStack *S,char ch { 12 / 16 node *p; pnode*mallocsizeofnode; p-chch; p-nextS-top; S-topp; } //char型元素进栈 Status Push_intsqStack *S,int num { lnode *p; plnode*mallocsizeoflnode; p-numnum; p-nextS-top; S-topp; return OK; } //int型元素进栈 char GetTop_charSqStack *S { return S-top-ch; } //取char型栈顶元素 int GetTop_intsqStack *S { return S-top-num; } //取int型栈顶元素 Status Pop_charSqStack *S,char node *p; pS-top; xp-ch; S-topp-next; freep; return OK; } //char型栈出栈 13 / 16 Status Pop_intsqStack *S,int lnode *p; pS-top; xp-n