问题形貌:设计一个步伐,演示用算符优先法对算术表达式求值的过程。使用算符优先关系,实现对算术四则肴杂运算表达式的求值。
(1)输入的形式:表达式,比方2*(3+4)#
包罗的运算符只能有’+’ 、’-’ 、’’ 、’/’ 、’(’、 ‘)’,“#”代表输入竣事符;
(2)输出的形式:运算效果,比方2(3+4)=14;
(3)步伐所能到达的功能:对表达式求值并输出。
[code]#include#include#include#define stack_init_size 100#define stackincrement 10struct stack{ int *base; int *top; char data; int stacksize;};void initstack(struct stack &s){ char e; s.base = (int*)malloc(stack_init_size * sizeof(int)); if(!s.base) exit(0); s.top = s.base; s.stacksize = stack_init_size;}char stack_top(struct stack s){ char e; if(s.top==s.base) return -1; e = *(s.top-1); return e;}void push(struct stack &s,int e){ if(s.top-s.base >= s.stacksize) { s.base = (int*)realloc(s.base,(s.stacksize + stackincrement) * sizeof(int)); if(!s.base) exit(0); s.top = s.base + s.stacksize; s.stacksize += stackincrement; } *s.top++ = e;}char pop(struct stack &s){ char e; if(s.top==s.base) return -1; e = *--s.top; return e;}int getIndex(char theta) //获取theta所对应的索引 { int index = 0; switch (theta) { case '+': index = 0; break; case '-': index = 1; break; case '*': index = 2; break; case '/': index = 3; break; case '(': index = 4; break; case ')': index = 5; break; case '#': index = 6; default:break; } return index; } char getPriority(char theta1, char theta2) //获取theta1与theta2之间的优先级 { const char priority[][7] = //算符间的优先级关系 { { '>','>','','>','','>','>','>','','>' }, { '>','>','>','>','','>' }, { '','>' }, { ' |