简单表达式求值
来源:互联网 发布:淘宝上质量好的鞋店 编辑:程序博客网 时间:2024/05/22 04:54
此表达式求值程序利用Stack实现
/**//******************************
Date:
2006 - 10 -24
Description:
This programe is aiming to
carry out operator counting by
using of sequence stack
*******************************/
#include "stdio.h"
#define MAXSIZE 128
typedef char DataType;
int pIFX = 0;
int pPFX = 0;
int pTP = 0;
/**//***Define a Stack Struct***/
typedef struct
...{
DataType stack[MAXSIZE];
}SeqStack;
/**//**********初始化PFX IFX************/
SeqStack PFX;
SeqStack IFX;
SeqStack TP;
/**//***************************
Function: Stack push
Param: SeqStack ss, char dat
Return: SeqStack
****************************/
SeqStack Push(SeqStack s, char dat)
...{
s.stack[pPFX] = dat;
return s;
}
/**//***************************
Function: Stack pop
Param: SeqStack ss, char dat
Return: SeqStack
****************************/
SeqStack Pop(SeqStack s, char dat)
...{
}
int CtoD(char c)
...{
return(c - '0');
}
char DtoC(int x)
...{
return(x + 48);
}
char InputPression(void)
...{
int i = 0;
char ch;
scanf("%c",&ch);
while(ch!= '=')
...{
IFX.stack[i ++] = ch;
scanf("%c",&ch);
}
IFX.stack[i] = '=';
}
void PrintStack(SeqStack s)
...{
int i = 0;
while(s.stack[i] != '=')
printf("%c",s.stack[i++]);
getchar();
getchar();
}
SeqStack toSufix()
...{
int pIFX = 0;
char ch;
TP.stack[pTP++] = '=';
while(IFX.stack[pIFX]!= '=')
...{
ch = IFX.stack[pIFX];
switch(ch)
...{
case '0':case '1':case '2':case '3':
case '4':case '5':case '6':case '7':
case '8': case'9':
PFX.stack[pPFX++] = ch;
break;
case '(':
TP.stack[++pTP] = '(';
break;
case ')':
while(TP.stack[pTP] != '(')
...{
PFX.stack[pPFX++] = TP.stack[pTP];
pTP--;
}
pTP--;
break;
case '+':
case '-':
while(
(pTP > 1 && TP.stack[pTP] != '(') &&
(TP.stack[pTP]== '+' || TP.stack[pTP]== '-')
)
PFX.stack[pPFX++] = TP.stack[pTP--];
pTP ++;
TP.stack[pTP]= ch;
break;
case '*':
case '/':
while(
pTP > 1 &&
(TP.stack[pTP]== '*' || TP.stack[pTP]== '/')
)
PFX.stack[pPFX++] = TP.stack[pTP--];
pTP++;
TP.stack[pTP] = ch;
break;
}/**//*end switch*/
pIFX++;
}/**//*end while*/
while(pTP > 1)
PFX.stack[pPFX++] = TP.stack[pTP--];
PFX.stack[pPFX] = '=';
}
int Computing()
...{
char ch;
char tmp1;
char tmp2;
int tmp;
pPFX = 0;
pIFX = 0;
pTP = 0;
while(PFX.stack[pPFX]!= '=')
...{
ch = PFX.stack[pPFX];
switch(ch)
...{
case '0':case '1':case '2':case '3':
case '4':case '5':case '6':case '7':
case '8': case'9':
pTP++;
TP.stack[pTP] = ch;
break;
case '+':
tmp1 = TP.stack[pTP--];
tmp2 = TP.stack[pTP--];
tmp = CtoD(tmp1) + CtoD(tmp2);
TP.stack[++pTP] = DtoC(tmp);
break;
case '-':
tmp1 = TP.stack[pTP--];
tmp2 = TP.stack[pTP--];
tmp = CtoD(tmp1) - CtoD(tmp2);
TP.stack[++pTP] = DtoC(tmp);
break;
case '*':
tmp1 = TP.stack[pTP--];
tmp2 = TP.stack[pTP--];
tmp = CtoD(tmp1) * CtoD(tmp2);
TP.stack[++pTP] = DtoC(tmp);
break;
case '/':
tmp1 = TP.stack[pTP--];
tmp2 = TP.stack[pTP--];
tmp = CtoD(tmp1) / CtoD(tmp2);
TP.stack[++pTP] = DtoC(tmp);
break;
}/**//*end switch*/
pPFX ++;
}/**//*end while*/
return(CtoD(TP.stack[1]));
}
/**//******************************
Main Function
*******************************/
int main()
...{
printf("Input count pression: ");
InputPression();
PrintStack(IFX);
PFX = toSufix();
PrintStack(PFX);
printf("%d",Computing());
getchar();
}
Date:
2006 - 10 -24
Description:
This programe is aiming to
carry out operator counting by
using of sequence stack
*******************************/
#include "stdio.h"
#define MAXSIZE 128
typedef char DataType;
int pIFX = 0;
int pPFX = 0;
int pTP = 0;
/**//***Define a Stack Struct***/
typedef struct
...{
DataType stack[MAXSIZE];
}SeqStack;
/**//**********初始化PFX IFX************/
SeqStack PFX;
SeqStack IFX;
SeqStack TP;
/**//***************************
Function: Stack push
Param: SeqStack ss, char dat
Return: SeqStack
****************************/
SeqStack Push(SeqStack s, char dat)
...{
s.stack[pPFX] = dat;
return s;
}
/**//***************************
Function: Stack pop
Param: SeqStack ss, char dat
Return: SeqStack
****************************/
SeqStack Pop(SeqStack s, char dat)
...{
}
int CtoD(char c)
...{
return(c - '0');
}
char DtoC(int x)
...{
return(x + 48);
}
char InputPression(void)
...{
int i = 0;
char ch;
scanf("%c",&ch);
while(ch!= '=')
...{
IFX.stack[i ++] = ch;
scanf("%c",&ch);
}
IFX.stack[i] = '=';
}
void PrintStack(SeqStack s)
...{
int i = 0;
while(s.stack[i] != '=')
printf("%c",s.stack[i++]);
getchar();
getchar();
}
SeqStack toSufix()
...{
int pIFX = 0;
char ch;
TP.stack[pTP++] = '=';
while(IFX.stack[pIFX]!= '=')
...{
ch = IFX.stack[pIFX];
switch(ch)
...{
case '0':case '1':case '2':case '3':
case '4':case '5':case '6':case '7':
case '8': case'9':
PFX.stack[pPFX++] = ch;
break;
case '(':
TP.stack[++pTP] = '(';
break;
case ')':
while(TP.stack[pTP] != '(')
...{
PFX.stack[pPFX++] = TP.stack[pTP];
pTP--;
}
pTP--;
break;
case '+':
case '-':
while(
(pTP > 1 && TP.stack[pTP] != '(') &&
(TP.stack[pTP]== '+' || TP.stack[pTP]== '-')
)
PFX.stack[pPFX++] = TP.stack[pTP--];
pTP ++;
TP.stack[pTP]= ch;
break;
case '*':
case '/':
while(
pTP > 1 &&
(TP.stack[pTP]== '*' || TP.stack[pTP]== '/')
)
PFX.stack[pPFX++] = TP.stack[pTP--];
pTP++;
TP.stack[pTP] = ch;
break;
}/**//*end switch*/
pIFX++;
}/**//*end while*/
while(pTP > 1)
PFX.stack[pPFX++] = TP.stack[pTP--];
PFX.stack[pPFX] = '=';
}
int Computing()
...{
char ch;
char tmp1;
char tmp2;
int tmp;
pPFX = 0;
pIFX = 0;
pTP = 0;
while(PFX.stack[pPFX]!= '=')
...{
ch = PFX.stack[pPFX];
switch(ch)
...{
case '0':case '1':case '2':case '3':
case '4':case '5':case '6':case '7':
case '8': case'9':
pTP++;
TP.stack[pTP] = ch;
break;
case '+':
tmp1 = TP.stack[pTP--];
tmp2 = TP.stack[pTP--];
tmp = CtoD(tmp1) + CtoD(tmp2);
TP.stack[++pTP] = DtoC(tmp);
break;
case '-':
tmp1 = TP.stack[pTP--];
tmp2 = TP.stack[pTP--];
tmp = CtoD(tmp1) - CtoD(tmp2);
TP.stack[++pTP] = DtoC(tmp);
break;
case '*':
tmp1 = TP.stack[pTP--];
tmp2 = TP.stack[pTP--];
tmp = CtoD(tmp1) * CtoD(tmp2);
TP.stack[++pTP] = DtoC(tmp);
break;
case '/':
tmp1 = TP.stack[pTP--];
tmp2 = TP.stack[pTP--];
tmp = CtoD(tmp1) / CtoD(tmp2);
TP.stack[++pTP] = DtoC(tmp);
break;
}/**//*end switch*/
pPFX ++;
}/**//*end while*/
return(CtoD(TP.stack[1]));
}
/**//******************************
Main Function
*******************************/
int main()
...{
printf("Input count pression: ");
InputPression();
PrintStack(IFX);
PFX = toSufix();
PrintStack(PFX);
printf("%d",Computing());
getchar();
}
- 简单表达式求值
- 简单表达式求值
- 简单的表达式求值
- 简单算数表达式求值
- 简单算术表达式求值
- 简单算术表达式求值
- 简单算术表达式求值
- 应用题_简单表达式求值
- 实现简单的表达式求值
- 最简单的表达式求值
- 编程练习:简单表达式求值
- 简单栈应用-表达式求值
- 栈及简单表达式求值
- 问题 H: 简单表达式求值
- 一种字符串表达式求值的简单方法
- hdu 1237 简单计算器(表达式求值)
- 简单算术表达式的求值程序
- 利用栈实现简单算术表达式求值
- 分析DataList分页和超级链接技术
- 属性问题
- 介绍一些免费的学术电子资源搜索引擎
- CPU的时钟频率
- VC常见数据类型转换详解
- 简单表达式求值
- 全面接触Intel反超频技术
- Struts配置连接池错误解决问题
- tomcat jdk环境变量配置
- Struts数据源配置过程(不在Action里连接)
- 网页鼠标光标样式
- c# 窗口布局的一个问题
- 科技论文写作讲义
- prototype.js帮助