利用栈实现逆波兰表达式求值

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计题目十九:利用栈实现逆波兰表达式求值

基本要求:

1.输入表达式,并对表达式的括号式匹配问题进行判。

2.输出逆波兰式的值。

#include

#include

#include

#include

#include

#include

#define N 200

void trans(char str[],char exp[])//这是求解的关键,将算术表达式转换成逆波兰表达式。

{

struct

{

char data[N];

int top; //栈顶指针

}op; //在这设立一个字符栈,用于存放字符!

char ch;

int i=0, t=0;

op.top = -1;

ch = str[i];

i++;

while(ch != '\0')//判断字符是数字的进入后缀表达式数组exp[N],字符进入字符栈中

{

switch(ch)

{

case '(': op.top++;

op.data[op.top] = ch;

break;

case ')':

while(op.data[op.top] != '(')

{

exp[t] = op.data[op.top];

op.top--;

t++;

}

op.top--;

break;

case '+':

case '-':

while(op.top!=-1 && op.data[op.top]!='(')

{

exp[t] = op.data[op.top];

t++;

op.top--;

}

op.top++;

op.data[op.top] = ch;

break;

case '*':

while (op.data[op.top]!='(' && op.data[op.top]=='/')

{

exp[t] = op.data[op.top];

op.top--;

t++;

}

op.top++;

op.data[op.top] = ch;

break;

case '/':

while (op.data[op.top]!='(' && op.data[op.top]=='*')

{

exp[t] = op.data[op.top];

op.top--;

t++;

}

op.top++;

op.data[op.top] = ch;

break;

case ' ': break;

default:

while((ch>='0' && ch<='9') || (ch == '.'))

{

exp[t] = ch; t++;

ch = str[i]; i++;

}

i--;

exp[t] = '#';

t++;

}

ch = str[i];

i++;

}

while(op.top!=-1 && op.data[op.top]!='(')

{

exp[t] = op.data[op.top];

t++;

op.top--;

}

exp[t] = '\0';

}

double compvalue(char exp[]) //对后缀表达式进行求解,计算。{

struct

{

double data[N];

int top; //栈顶指针

}st; //设立一个数值栈,将数组中的数值推入栈中

char ch;

int t = 0;

double d, n,sum;

st.top = -1;

ch = exp[t];

t++;

while(ch !='\0')//对数值和字符进行运算

{

switch(ch)

{

case '+': st.data[st.top-1] = st.data[st.top-1] + st.data[st.top];

st.top--;break;

case '-': st.data[st.top-1] = st.data[st.top-1] - st.data[st.top];

st.top--;break;

case '*': st.data[st.top-1] = st.data[st.top-1]*st.data[st.top];

st.top--;break;

case '/':

if (st.data[st.top] != 0)

st.data[st.top-1] = st.data[st.top-1]/st.data[st.top];

else

{

printf("\n\t除零错误\n");

exit(0);

}

相关文档
最新文档