数据结构 表达式求值
2009-11-21 02:14
260 查看
问题描述:使用键盘输入表达式,计算表达式的值并输出;将表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。
由于能力有限,只能编写运算个位数的运算(输入数字 -10<x<10)。
本程序仅供参考。
*******************************************************************************
#include<stdio.h>
#define maxsize 100
typedef struct
{
char data[maxsize];
int top;
}OPTR;
typedef struct
{
int data[maxsize];
int top;
}OPND;
OPND list1;
OPTR list2;
void initstack1(OPND &s)
{
s.top=0;
}
void initstack2(OPTR &s)
{
s.top=0;
}
void push1(OPND &s,int x)
{
s.data[s.top++]=x;
}
void push2(OPTR &s,char x)
{
s.data[s.top++]=x;
}
char gettop2(OPTR s)
{
return s.data[s.top-1];
}
int gettop1(OPND s)
{
return s.data[s.top-1];
}
int pop1(OPND &s)
{
s.top--;
return s.data[s.top];
}
char pop2(OPTR &s)
{
s.top--;
return s.data[s.top];
}
int oprate(int a,char c,int b)
{
switch(c)
{
case'+':return a+b;
case'-':return a-b;
case'*':return a*b;
case'/':return a/b;
}
}
char compare(char x,char y)
{
int i,j,q;
char b[7]={'+','-','*','/','(',')','#'};
char a[7][7]={
{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='}
};
for(q=0;q<7;q++)
{
if(x==b[q])i=q;
}
for(q=0;q<7;q++)
{
if(y==b[q])j=q;
}
return a[i][j];
}
void main()
{
int result;
initstack1(list1);
initstack2(list2);
push2(list2,'#');
char c=getchar();
while((c!='#')||(gettop2(list2)!='#'))
{
if(c>=48&&c<=57)
{
push1(list1,c-'0');
c=getchar();
}
else switch(compare(gettop2(list2),c))
{
case'<':
{
push2(list2,c);
c=getchar();
break;
}
case'=':
{
pop2(list2);
c=getchar();
break;
}
case'>':
{
int temat=pop2(list2);
int b=pop1(list1);
int a=pop1(list1);
result=oprate(a,temat,b);
push1(list1,result);
break;
}
}
}
printf("%d/n",gettop1(list1));
}
***********************************************************************************
由于能力有限,只能编写运算个位数的运算(输入数字 -10<x<10)。
本程序仅供参考。
*******************************************************************************
#include<stdio.h>
#define maxsize 100
typedef struct
{
char data[maxsize];
int top;
}OPTR;
typedef struct
{
int data[maxsize];
int top;
}OPND;
OPND list1;
OPTR list2;
void initstack1(OPND &s)
{
s.top=0;
}
void initstack2(OPTR &s)
{
s.top=0;
}
void push1(OPND &s,int x)
{
s.data[s.top++]=x;
}
void push2(OPTR &s,char x)
{
s.data[s.top++]=x;
}
char gettop2(OPTR s)
{
return s.data[s.top-1];
}
int gettop1(OPND s)
{
return s.data[s.top-1];
}
int pop1(OPND &s)
{
s.top--;
return s.data[s.top];
}
char pop2(OPTR &s)
{
s.top--;
return s.data[s.top];
}
int oprate(int a,char c,int b)
{
switch(c)
{
case'+':return a+b;
case'-':return a-b;
case'*':return a*b;
case'/':return a/b;
}
}
char compare(char x,char y)
{
int i,j,q;
char b[7]={'+','-','*','/','(',')','#'};
char a[7][7]={
{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='}
};
for(q=0;q<7;q++)
{
if(x==b[q])i=q;
}
for(q=0;q<7;q++)
{
if(y==b[q])j=q;
}
return a[i][j];
}
void main()
{
int result;
initstack1(list1);
initstack2(list2);
push2(list2,'#');
char c=getchar();
while((c!='#')||(gettop2(list2)!='#'))
{
if(c>=48&&c<=57)
{
push1(list1,c-'0');
c=getchar();
}
else switch(compare(gettop2(list2),c))
{
case'<':
{
push2(list2,c);
c=getchar();
break;
}
case'=':
{
pop2(list2);
c=getchar();
break;
}
case'>':
{
int temat=pop2(list2);
int b=pop1(list1);
int a=pop1(list1);
result=oprate(a,temat,b);
push1(list1,result);
break;
}
}
}
printf("%d/n",gettop1(list1));
}
***********************************************************************************
相关文章推荐
- 南阳 oj 表达式求值 题目35 数据结构 NYOj
- 数据结构 学习笔记(三):线性结构:堆栈,队列,表达式求值,多项式加法运算
- 【数据结构】栈的应用 I :表达式求值
- 数据结构_表达式求值
- 数据结构之简单四则运算表达式求值8-(栈的实现)
- <数据结构>栈-表达式求值
- 回顾数据结构之栈的应用-表达式求值
- c语言数据结构实现后缀表达式求值
- 数据结构---表达式求值
- 数据结构--栈的应用(表达式求值 nyoj 35)
- NYOJ-35-表达式求值(C语言数据结构)
- 数据结构c语言实现表达式求值
- 南阳 oj 表达式求值 题目35 数据结构 NYO题目链接
- 数据结构 栈的应用-- 表达式求值
- JavaScript数据结构中栈的应用之表达式求值问题详解
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- 数据结构中的栈,在解决很多问题都有用处,比如括号匹配,迷宫求解,表达式求值等等 java中有封装好的类,可以直接调用。
- 数据结构 【实验5 表达式求值】
- 【数据结构】复杂表达式的求值
- C语言数据结构之逆波兰表达式求值