[数据结构]第二次作业:表达式的计算
来源:互联网 发布:什么软件写日记最好 编辑:程序博客网 时间:2024/04/29 14:20
/* 头文件 */
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef char ElemType;
typedef int Status;
typedef char SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
SqStack OPTR;
SqStack OPND;
int a,b,result;
char x,theta,c;
/*源文件*/
/* ============== Program Description ============= */
/* Freshare's 2nd_1 of dswork */
/* ================================================== */
#include "stdio.h"
#include "2nd.h"
int In(char c) // 判断是否为运算符
{
if ( c=='(' || c=='+' || c=='-' || c == '*' || c=='/' || c==')' || c=='#')
return TRUE;
else return FALSE ;
}
int Operate ( char d ,char e,char f) //计算
{
int uu;
switch(e)
{
case '+':
uu=d+f;
break;
case '-':
uu=d-f;
break;
case '*':
uu=d*f;
break;
case '/':
uu=d/f;
break;
}
return uu;
}
char Precede(char a,char b) //判断优先级
{
char op;
switch(a)
{
case '#':
if (b=='#') op='=';else op='<';
break;
case '+':
if (b=='+'||b=='-'||b==')'||b=='#') op='>';else op='<';
break;
case '-':
if (b=='*'||b=='/'||b=='(') op='<';else op='>';
break;
case '*':
if (b=='(') op='<';else op='>';
break;
case '/':
if (b=='(') op='<';else op='>';
break;
case '(':
if (b==')') op='=';else op='<';
break;
case ')':
op='>';
break;
}
return op;
}
SqStack InitStack( SqStack s) //初始化
{
s.base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if(!s.base) exit (OVERFLOW);
s.top=s.base;
s.stacksize = STACK_INIT_SIZE ;
return s;
}
SElemType GetTop ( SqStack S) //GetTop
{
SElemType e;
if ( S.top == S.base) return ERROR;
e = *( S.top -1 );
return e ;
}
SqStack Push ( SqStack S , SElemType e) //Push
{
if ( S.top - S.base >= S.stacksize )
{
S.base = (ElemType *) realloc (S.base ,
(S.stacksize + STACKINCREMENT) * sizeof(ElemType));
if(!S.base) exit (OVERFLOW);
S.top = S.base +S.stacksize ;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return S ;
}
int Pop_OPND () //Pop
{
if( OPND.top == OPND.base) return ERROR ;
return *--OPND.top ;
}
char Pop_OPTR () //Pop
{
if( OPTR.top == OPTR.base) return ERROR ;
return *--OPTR.top ;
}
SElemType EvaluateExpression() //EvaluateExpression
{
OPTR=InitStack (OPTR);
OPTR=Push(OPTR,'#');
OPND=InitStack (OPND);
c = getchar();
while (c!='#'||GetTop(OPTR)!='#')
{
if (!In(c))
{
c-=48;
OPND=Push (OPND,c);
c =getchar();
}
else
switch (Precede (GetTop(OPTR),c))
{
case '<':
OPTR=Push(OPTR,c); c=getchar();
break;
case '=':
x=Pop_OPTR(); c=getchar();
break;
case '>':
theta=Pop_OPTR();
b=Pop_OPND();
a=Pop_OPND();
OPND=Push(OPND,Operate(a,theta,b));
break;
}
}
return (GetTop(OPND));
}
void main()
{
printf("请输入一个表达式,并以#号结束:/n>>>>");
result=EvaluateExpression();
printf(">>>>结果是:%d/n",result);
getchar();
}
- [数据结构]第二次作业:表达式的计算
- 数据结构第二次作业(表达式求值【栈模拟】)
- 第二次数据结构作业
- 数据结构第二次作业 二分
- 数据结构第二次作业
- 数据结构第二次作业
- 第二次作业(3.数据结构)
- 第二次的汇编作业
- 数据结构--计算简单的表达式
- 数据结构_2_表达式的计算
- 算法与数据结构作业第二次 cards
- 我的C++第二次作业
- cs231n的第二次作业(1)
- c语言作业,,输入表达式并计算表达式的值
- 二元的表达式的计算(数据结构)
- 表达式计算之二:分数的数据结构
- 表达式计算之四:方程的数据结构
- 数据结构栈的引用计算表达式
- 郁闷中,我的C盘被毁了。。。 。。。
- 掌握 Ajax
- JAVA语言总结
- 毕业设计好难呀
- [数据结构]第一次作业:将两个有序线形表合并成一个有序表
- [数据结构]第二次作业:表达式的计算
- [数据结构]第三次作业:字符串替换
- 关于hibernate的缓存使用
- [数据结构]第五次作业:huffman编码及其译码(一)
- [数据结构]第五次作业:huffman编码及其译码(二)
- [数据结构]第六次作业:图的建立、遍历、最小生成树、最短路径
- [数据结构]第七次作业:二叉排序树
- [数据结构]第八次作业:快速排序
- JDK5.0的新东西(边学边总结)