時間限制:
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*+
類似於表示式求值的做法,用棧來做。
#include#include#include#includeusing namespace std;
stackoperstack;
queueansqueue;
char str[1010];
int main()
else if(str[i]=='+'||str[i]=='-')
operstack.push(str[i]);
}else if(str[i]=='*'||str[i]=='/')
operstack.push(str[i]);
}else if(str[i]=='(')
else if(str[i]==')')
operstack.pop();
}i++;
} while(!operstack.empty())
char ch=operstack.top();
operstack.pop();
ansqueue.push(ch);
} while(!ansqueue.empty())
printf("\n");
} return 0;
} /*41
(2*(2+3))
4+4*5/(3+1)
(1+2)*3+4*5
*/
NYOJ 257 鬱悶的C小加(一)
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 我們熟悉的表示式如a b a b c d 等都屬於中綴表示式。中綴表示式就是 對於雙目運算子來說 操作符在兩個運算元中間 num1 operand num2。同理,字尾表示式就是操作符在兩個運算元之後 num1 num2 ope...
nyoj257鬱悶的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 標記 讓...