#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 == '*' || a == '/') &&(b == '+' || b == '-')){
return 1;
}
else{
return 0;
}
}
int operate(char theta, int a, int b) {
if(theta == '+'){
return a + b;
}
else if(theta == '-'){
return a - b;
}
else if(theta == '*'){
return a * b;
}
else if(theta == '/'){
return a / b;
}
}
void calc(Stack *numbers, Stack *operators) {
int b = top(numbers);
pop(numbers);
int a = 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 m;
scanf("%d\n", &m);
Stack *numbers = (Stack *)malloc(sizeof(Stack));
init(numbers, m);
Stack *operators = (Stack *)malloc(sizeof(Stack));
init(operators, m);
char *buffer = (char *)malloc(sizeof(char) *(m + 1));
scanf("%s", buffer);
int i = 0;
while(i < m){
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)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- ??在文章數(shù)據(jù)結構入門(一)棧的實現(xiàn)中,我們已經知道了如何去實現(xiàn)“棧”這個數(shù)據(jù)結構,并且介紹了一個它的應用:數(shù)的進...
- 假定我們需要計算的表達式是一個類似這樣的形式 1-(3+2)*7-9/3+(1+2)*3 和一般的簡單計算不一樣,...
- 題目:輸入字符串格式的算數(shù)表達式,計算出結果 思路:創(chuàng)建兩個棧,一個棧用來存儲數(shù)字,另一個棧用來存儲運算符。然后從...
- 表情是什么,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息。高興了當然就笑了,難過就哭了。兩者是相互影響密不可...