算術表示式有字首表示法、中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。
輸入在一行中給出不含空格的中綴表示式,可包含+
、-
、*
、\
以及左右括號()
,表示式不超過20個字元。
在一行中輸出轉換後的字尾表示式,要求不同物件(運算數、運算符號)之間以空格分隔,但結尾不得有多餘空格。
2+3*(7-4)+8/4
2 3 7 4 - * + 8 4 / +
#include
#include
#include
#define error - 1
#define maxlenth 100
#define maxsize 20
typedef char elementtype;
typedef struct snode* ptrtosnode;
struct snode
elementtype data;
ptrtosnode next;
typedef ptrtosnode mystack;
bool isempty(mystack ms);
mystack create();
bool pushdata(mystack ms, elementtype x);
elementtype popdata(mystack ms);
int oprtodig(char ch);
int oprtodig(char ch)
int val;
switch (ch)
case '+':
val = 1;
break;
case '-':
val = 1;
break;
case '*':
val = 2;
break;
case '/':
val = 2;
break;
case '(':
val = 0;
break;
case ')':
val = 0;
break;
default:
printf("%c is invalid charn", ch);
break;
return val;
mystack create()
mystack ms = (mystack)malloc(sizeof(struct snode));
ms->next = null;
return ms;
bool isempty(mystack ms)
return (ms->next == null);
bool isfull(mystack ms)
return (ms->next == maxsize - 1);
bool pushdata(mystack ms,elementtype x)
bool rlt = false;
ptrtosnode tmpcell = (ptrtosnode)malloc(sizeof(struct snode));
tmpcell->data = x;
tmpcell->next = ms->next;
ms->next = tmpcell;
rlt = true;
return rlt;
elementtype popdata(mystack ms)
if(isempty(ms))
printf("empty stcak.\n");
return error;
else
elementtype rlt = ms->next->data;
ptrtosnode tmpcell;
tmpcell = ms->next;
ms->next = tmpcell->next;
free(tmpcell);
return rlt;
int main()
bool flag = false;
bool isfirst = true;
mystack stk = create();
char exrn[maxlenth];
gets(exrn);
int i = 0;
while(exrn[i]!='\0')
if(((i==0) && (exrn[i]=='-'||exrn[i]=='+')) || ((exrn[i]>='0' && exrn[i]<='9')||exrn[i]=='.') || ((exrn[i]=='-'||exrn[i]=='+')&&exrn[i-1]=='('))
if(flag && !isfirst)
printf(" ");
flag = false;
isfirst = false;
if(exrn[i] == '+')
i++;
printf("%c", exrn[i]);
i++;
while((exrn[i]>='0' && exrn[i] <= '9')|| exrn[i] == '.')
printf("%c",exrn[i++]);
continue;
else
flag = true;
if(exrn[i] == '(')
pushdata(stk,exrn[i]);
else if(exrn[i] == ')')
elementtype ch;
while((ch = popdata(stk))!='(')
printf(" %c",ch);
else
if(isempty(stk))
pushdata(stk,exrn[i]);
else
if( oprtodig(exrn[i]) > oprtodig(stk->next->data))
pushdata(stk,exrn[i]);
else if(oprtodig(exrn[i]) <= oprtodig(stk->next->data))
doprintf(" %c", popdata(stk));
while( (stk->next!=null)&&(oprtodig(exrn[i]) <= oprtodig(stk->next->data)) );
pushdata(stk,exrn[i]);
i++;
while(!isempty(stk))
printf(" %c", popdata(stk));
system("pause");
3 11 表示式轉換 25分
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...
表示式轉換 25 分
首先規定優先順序,括號為最高優先順序,乘號或除號為次優先順序,加或減號為最低優先順序,至於數字,碰到就直接輸出即可。既然是數字,就有小數,整數,正數,負數之分,還有關於二元運算子的輸出,在括號內的二元運算子優先輸出,優先順序高的優先輸出 當然括號不算啊 根據題意,在輸出時可分為以下幾種情況。incl...
習題3 11 表示式轉換 刷題筆記
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...