#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define ERROR 0
#define OK 1
typedef struct Stack {
int *elements;
int max_size, top_index;
} Stack;
void init(Stack *s, int length) {
s->elements = (int *)malloc(sizeof(int) * length);
s->max_size = length;
s->top_index = -1;
}
int push(Stack *s, int element) {
if (s->top_index >= s->max_size - 1) {
return ERROR;
}
s->top_index++;
s->elements[s->top_index] = element;
return OK;
}
int pop(Stack *s) {
if (s->top_index < 0) {
return ERROR;
}
s->top_index--;
return OK;
}
int top(Stack *s) {
return s->elements[s->top_index];
}
int empty(Stack *s) {
if (s->top_index < 0) {
return 1;
} else {
return 0;
}
}
int precede(char a, char b) {
if (a == '*' && b == '+') {
return 1;
} else {
return 0;
}
}
int operate(char theta, int a, int b) {
if (theta == '+') {
return a + b;
} else {
return a * b;
}
}
void calc(Stack *numbers, Stack *operators) {
int a = top(numbers);
pop(numbers);
int b = top(numbers);
pop(numbers);
push(numbers, operate(top(operators), a, b));
pop(operators);
}
void clear(Stack *s) {
free(s->elements);
free(s);
}
int main() {
int n;
scanf("%d",&n);
Stack *numbers = (Stack *)malloc(sizeof(Stack));
init(numbers, n);
Stack *operators = (Stack *)malloc(sizeof(Stack));
init(operators,n);
char *buffer = (char *)malloc(sizeof(char) * (n + 1));
scanf("%s", buffer);
int i = 0;
while( i < n){
if(isdigit(buffer[i])){
push(numbers,buffer[i] - '0');
i++;
}
else{
if(empty(operators) || precede(buffer[i], top(operators))){
push(operators, buffer[i]);
i++;
}
else{
calc(numbers, operators);
}
}
}
while(!empty(operators)){
calc(numbers, operators);
}
printf("%d\n", top(numbers));
clear(numbers);
clear(operators);
free(buffer);
return 0;
}
表達式求值
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闹获,“玉大人期犬,你說我怎么就攤上這事”芊蹋” “怎么了龟虎?”我有些...
- 正文 為了忘掉前任棉安,我火速辦了婚禮,結果婚禮上铸抑,老公的妹妹穿的比我還像新娘贡耽。我一直安慰自己,他們只是感情好鹊汛,可當我...
- 文/花漫 我一把揭開白布蒲赂。 她就那樣靜靜地躺著,像睡著了一般刁憋。 火紅的嫁衣襯著肌膚如雪滥嘴。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蛔添!你這毒婦竟也來了痰催?” 一聲冷哼從身側響起兜辞,我...
- 正文 年R本政府宣布壮吩,位于F島的核電站进苍,受9級特大地震影響,放射性物質發(fā)生泄漏粥航。R本人自食惡果不足惜琅捏,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望递雀。 院中可真熱鬧柄延,春花似錦、人聲如沸缀程。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽杨凑。三九已至滤奈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撩满,已是汗流浹背蜒程。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 0.前言 之前用js實現(xiàn)的一個簡易計算器有許多處理得不好的地方帝洪,拋開樣式的問題似舵,計算器最核心的計算部分直接使用了e...