[栈和队列]从中缀向后缀转换表达式
2014-05-01 10:18
405 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> #define INIT_STACK_SIZE 100 typedef struct { char * chOperator; int dwtop; }OPND; void InitStack(OPND *); char Pop(OPND *); void Push(OPND *,char ); char GetTop(OPND); char ComparePri(char op1,char op2); void printStack(OPND); char stringBuffer[128] = {'\0'}; char stringValue[128] = {'\0'}; int main() { OPND opnd; int N = 0; char ch ,*strValue,*strBuffer; scanf("%d",&N); getchar(); while(N--){ strValue = stringValue; strBuffer = stringBuffer; memset(stringValue,0,128*sizeof(char)); memset(stringBuffer,0,128*sizeof(char)); gets(stringBuffer); InitStack(&opnd); Push(&opnd,'#'); ch = *strBuffer++; while(ch != '#' || GetTop(opnd) != '#'){ if((ch >= 'a' && ch <= 'z')||(ch >= 'A' && ch <= 'Z')) { *strValue = ch; strValue++; ch = *(strBuffer++); } else switch(ComparePri(GetTop(opnd),ch)){ case '<' : Push(&opnd,ch); ch = *(strBuffer++); break; case '=' : Pop(&opnd); ch = *(strBuffer++); break; case '>' : *strValue = Pop(&opnd); strValue++; break; } } puts(stringValue); } return 0; } void InitStack(OPND *S) { S->chOperator = (char *)malloc(INIT_STACK_SIZE * sizeof(char)); if(!S->chOperator) exit(1); S->dwtop = 0; } void Push(OPND *S,char ch) { *(S->chOperator + S->dwtop) = ch; S->dwtop++; } char Pop(OPND *S) { S->dwtop--; return *(S->chOperator + S->dwtop); } char ComparePri(char op1,char op2) { if((op1 == '+' || op1 == '-')&&(op2 == '*' || op2 == '/')) return '<'; else if((op1 == '(' && op2 == ')')||(op1 == '#' && op2 == '#')) return '='; else if(op1 == '(' || op1 == '#' || op2 == '(') return '<'; else return '>'; } void printStack(OPND opnd) { while(opnd.dwtop){ opnd.dwtop--; printf("%c",*(opnd.chOperator + opnd.dwtop)); } } char GetTop(OPND opnd) { return *(opnd.chOperator + opnd.dwtop -1); }
相关文章推荐
- [栈和队列]从中缀向后缀转换表达式
- [栈和队列]从中缀向后缀转换表达式
- 数据结构之 栈和队列---算术表达式的转换(前缀+中缀+后缀)
- 漫谈栈队列及后缀表达式,后缀中缀表达式间的转换
- 中缀到后缀表达式的转换
- 中缀表达式转换成前缀表达式和后缀表达式
- 中缀后缀表达式的转换
- 栈和队列6|中缀表达式转换为后缀表达式 – 数据结构和算法28
- 中缀表达式 转换为 前缀 后缀表达式
- 中缀表达式转换成后缀表达式
- 中缀表达式转换为后缀表达式,计算后缀表达式
- 中缀表达式到后缀表达式的转换C++实现
- 中缀表达式 转换为 后缀表达式
- 八、通过中缀计算表达式转换成后缀计算表达式
- 4.从中缀向后缀转换表达式
- 栈应用之将中缀数值表达式转换成后缀表达式
- 中缀/后缀表达式转换-使用四则混合运算表达式生成树
- 中缀表达式转换为后缀表达式的算法
- 一天一个算法: 前缀,中缀,后缀表达式的转换
- 中缀/后缀表达式转换-使用四则混合运算表达式生成树