中綴表示式轉字尾表示式

2021-06-14 01:10:19 字數 1395 閱讀 4879

中綴表示式和字尾表示式的定義,度娘。。。

/*中綴表示式轉換為字尾表示式

步驟如下:

開始掃瞄中綴表示式;

如果為數字時,加入字尾表示式;

如果為運算子:

a. 若為 '(',入棧;

b. 若為 ')',則依次把棧中的的運算子加入字尾表示式中,直到出現'(',從棧中刪除'(' ;

c. 若為 除括號外的其他運算子, 當其優先順序高於棧頂運算子時,直接入棧。否則從棧頂開始,

依次彈出比當前處理的運算子優先順序高和優先順序相等的運算子,直到乙個比它優先順序低的或者遇到了乙個左括號為止。

當掃瞄的中綴表示式結束時,棧中的的所有運算子出棧。

*/#include#include#define stack_size 50

#define m 50

typedef struct node

seqstack;

void initstack(seqstack *s)

int push(seqstack *s,char x)

char *pop(seqstack *s)

return 0;

}char *gettop(seqstack *s)

}int priority(char op)

int compare(char ch1,char ch2)

void main()

else if(str[k]>='a'&&str[k]<='z')

else if(str[k]>='a'&&str[k]<='z')

else if(str[k]=='(') //如果是左括號直接進操作符棧optr

push(&optr,str[k]);

else if(str[k]==')') //如果是右括號,將與第乙個左括號之間的操作符全部壓入字尾表示式中,且左括號出棧

}else if(gettop(&optr)==-1) //如果是運算子,但是棧頂元素為空時

push(&optr,str[k]);

else if(gettop(&optr)=='(') //如果是運算子,但是棧頂元素為'('時

push(&optr,str[k]);

else

switch(compare(str[k],gettop(&optr)))

if(gettop(&optr)=='(')

pop(&optr);

push(&optr,str[k]);

break;

} k++;

} while(gettop(&optr)!=-1)

printf("將該中綴表示式轉換為字尾表示式為:");

for(i=0;i

中綴表示式轉字尾表示式

using system using system.collections.generic using system.text namespace 中綴表示式轉字尾表示式 class convert public void run top break case case while top 1 st...

中綴表示式轉字尾表示式

將乙個普通的中綴表示式轉換為字尾表示式的一般演算法是 首先需要分配2個棧,乙個作為臨時儲存運算子的棧s1 含乙個結束符號 乙個作為輸入字尾表示式的棧s2 空棧 s1棧可先放入優先順序最低的運算子 注意,中綴式應以此最低優先順序的運算子結束。可指定其他字元,不一定非 不可。從中綴式的左端開始取字元,逐...

中綴表示式轉字尾表示式

演算法 1.設定乙個運算子棧 初始時可以將棧頂運算子置為 2.按順序掃瞄中綴表示式,當輸入為運算元時就將其輸出到字尾表示式中 3.當輸入為運算子時,則比較輸入運算子和棧頂運算子的優先順序。若輸入運算子的優先順序高於棧頂運算子的優先順序,則將輸入運算子入棧 否則,棧頂運算子的優先順序高於或等於輸入運算...