nyoj257鬱悶的c小加(一)(棧和佇列)

2021-07-02 00:37:06 字數 1918 閱讀 4498

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:3 描述

我們熟悉的表示式如a+b、a+b*(c+d)等都屬於中綴表示式。中綴表示式就是(對於雙目運算子來說)操作符在兩個運算元中間:num1 operand num2。同理,字尾表示式就是操作符在兩個運算元之後:num1 num2 operand。acm隊的「c小加」正在鬱悶怎樣把乙個中綴表示式轉換為字尾表示式,現在請你設計乙個程式,幫助c小加把中綴表示式轉換成字尾表示式。為簡化問題,運算元均為個位數,操作符只有+-*/ 和小括號。

輸入第一行輸入t,表示有t組測試資料(t<10)。

每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式。這個表示式裡只包含+-*/與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。並且輸入資料不會出現不匹配現象。

輸出每組輸出都單獨成行,輸出轉換的字尾表示式。

樣例輸入

21+2(1+2)*3+4*5

樣例輸出

12+12+3*45*+

/**

思路:使用乙個棧,用來存放運算子;使用乙個佇列 ,字尾表示式;

將輸入的字串從左到右掃瞄一遍,如果遇到數字,則直接進入佇列;

如果遇到「(」,直接進入棧,如果遇到「)」,將棧中的運算子出棧,進入佇列;

如果遇到'+','-','*','/',將當前遇到的運算子str[i]與棧頭的運算子opt1.top()進行優先順序比較,

如果str[i]的優先順序小於opt1.top()的優先順序,則將opt1.top()入隊,將str[i]進棧,

*/#include#include#include#include#includeusing namespace std;

int t;

char str[1010];

//stackopt1;//存放運算子的棧

//queueopt2;//存放字尾表示式的佇列

int compare(char op)//設定操作符的優先順序

else if(op=='*'||op=='/')

return 0;

}int main()

if(str[i]=='(')//遇到"("直接進棧

if(str[i]==')')

opt1.pop();//最後把「(」出棧,但不輸出

}else if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/')

opt1.push(str[i]);

}} while(!opt1.empty())

while(opt2.front()!='#')// 不以'#'結尾居然不對,不解???

printf("\n");

} return 0;

}

#include#include#include#includeusing namespace std;

int t;

char str[1010];

char compare(char s,char z)//操作符優先順序比較函式

if(s=='*'||s=='/')

if(s==')') return '<';

if(s=='('||s=='#') }

int main()

opt.push('#');

str[len]='#';

for(int i=0;i<=len;)

if(str[i]>='0'&&str[i]<='9'||str[i]=='.')

switch(compare(opt.top(),str[i]))

}printf("\n");

} return 0;

}

nyoj 257鬱悶的c小加(一)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 我們熟悉的表示式如a b a b c d 等都屬於中綴表示式。中綴表示式就是 對於雙目運算子來說 操作符在兩個運算元中間 num1 operand num2。同理,字尾表示式就是操作符在兩個運算元之後 num1 num2 ope...

NYOJ 257 鬱悶的C小加(一)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 我們熟悉的表示式如a b a b c d 等都屬於中綴表示式。中綴表示式就是 對於雙目運算子來說 操作符在兩個運算元中間 num1 operand num2。同理,字尾表示式就是操作符在兩個運算元之後 num1 num2 ope...

nyoj 257 鬱悶的C小加(一) 表示式求值

遞迴建立乙個個表示式樹。例如 1 1 2 2 的左子樹為根為1的樹 的右子樹為根為2的樹 優先順序高先建樹 優先順序低後建樹 中序遍歷計算結果 include include includechar str 2000 int len struct nodef 1020 int y 1020 標記 讓...