#include<stdio.h>
#include<string.h>
int F(char symbol)
{
switch(symbol)
{
case'+':
case'-': return 2;
case'*':
case'/':return 4;
case'^':
case'$':return 5;
case'(':return 0;
case'#':return -1;
default:return 8;
}
}
int G(char symbol)
{
switch(symbol)
{
case'+':
case'-': return 1;
case'*':
case'/':return 3;
case'^':
case'$':return 6;
case'(':return 9;
case')':return 0;
default:return 7;
}
}
void infix_postfix(char infix[],char postfix[])
{
int top;
int j;
int i;
char s[30];
char symbol;
top=-1;
s[++top]='#';
j=0;
for(i=0;i<strlen(infix);i++)
{
symbol=infix[i];
while(F(s[top])>G(symbol))
{
postfix[j]=s[top--];
j++;
}
if(F(s[top])!= G(symbol))
s[++top]=symbol;
else
top--;
}
while(s[top]!='#')
{
postfix[j++]=s[top--];
}
postfix[j]='\0';
}
int main()
{
char infix[20];
char postfix[20];
printf("Enter a vaild infix expression\n");
scanf("%s",infix);
infix_postfix(infix,postfix);
printf("the postfix expression is\n");
printf("%s\n",postfix);
}
uj5u.com熱心網友回復:
這個代碼涉及到中綴和后綴運算式,需要資料結構二叉樹的知識,如果你沒學過資料結構,可以先放過這個程式,以后再來理解。uj5u.com熱心網友回復:
能具體解釋一下這個程式中堆疊的功能嗎uj5u.com熱心網友回復:
比如后綴運算式2 5 +,先后入堆疊 2 5,碰到一個+號,把2 5 彈出堆疊計算,再入堆疊。uj5u.com熱心網友回復:
能具體把該程式的步驟講一下嗎uj5u.com熱心網友回復:
for(i=0;i<strlen(infix);i++){
symbol=infix[i];
while(F(s[top])>G(symbol))
{
postfix[j]=s[top--];
j++;
}
if(F(s[top])!= G(symbol))
s[++top]=symbol;
else
top--;
}
while(s[top]!='#')
{
postfix[j++]=s[top--];
}
postfix[j]='\0';
這部分不是很理解
uj5u.com熱心網友回復:
運算式計算的代碼網上(或書里)很多,可能寫法不同,原理都是差不多的,你可以先找一個寫的不錯有注釋的,看懂了以后回頭看這個,也就差不多了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/53550.html
標籤:基礎類
上一篇:openmp 多執行緒效率問題
下一篇:這題怎么寫??
