用操作符堆疊和運算元堆疊實現四則運算表示式

2021-09-18 05:14:46 字數 2305 閱讀 7462

學習了用用操作符堆疊和運算元堆疊實現四則運算表示式的基本思想和實現後,在的基礎上自己動手實現了一下,**全部在codeblocks 下測試通過。

堆疊實現**如下:

#ifndef _data_struct_h

#define _data_struct_h

typedef struct _node

node;

typedef struct _stack

stack;

void stack_init(stack *s,int nd_size);

bool stack_empty(stack *s);

void stack_push(stack *s,void *data);

void* stack_pop(stack *s);

void* stack_get_top(stack *s);

char stack_ch_pop(stack *s);

int stack_int_pop(stack *s);

char stack_ch_peek(stack *s);

#endif

#include #include #include #include #include #include "define.h"

#include "data_struct.h"

void stack_init(stack *s,int nd_size)

bool stack_empty(stack *s)

void stack_push(stack *s,void *data)

void* stack_pop(stack *s)

return data;

}void* stack_get_top(stack *s)

return data;

}char stack_ch_pop(stack *s)

int stack_int_pop(stack *s)

char stack_ch_peek(stack *s)

表示式實現**如下;

/*  求出四則運算表示式的值  */

#include #include #include #include #include #include "define.h"

#include "data_struct.h"

#define lp '('

#define rp ')'

#define plus '+'

#define minus '-'

#define mul '*'

#define div '/'

int expr_op_priority(char s)

}static int oper_nolower_pri(char new_op,char old_op)

static void expr_pop_and_calc(stack *s_op,stack *s_num)

stack_push(s_num,&result);

printf("push num:%d\n",result);

return;

}int math_expr(char *expr)

else if(*p == lp)

else if(*p == rp)

p++;

last_oper = stack_ch_peek(&stack_op);

printf("last oper111=%c\n",last_oper);

}else

stack_push(&stack_op,p);

p++;}}

while(!stack_empty(&stack_op))

else if(oper_nolower_pri(last_op,cur_op))

expr_pop_and_calc(&stack_op,&stack_num);

if(cur_op == rp && last_op != lp)

stack_push(&stack_op,&cur_op);

}num = stack_int_pop(&stack_num);

assert(stack_empty(&stack_num));

assert(stack_empty(&stack_op));

return num;

}void math_expr_test(void)

棧 四則運算表示式實現

棧的乙個常見應用,四則運算表示式求值。主要有兩個步驟 1,中綴轉字尾 2,字尾求值 實現起來比較簡單,我通過c 的容器stack實現一遍。從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,即稱為字尾表示式的一部分,若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於棧頂符號 乘除優先...

Java實現四則運算表示式計算

四則運算表示式計算 author penli public class arithmetic public static double arithmetic string exp 解析計算四則運算表示式,例 2 3 4 2 22 2 3 param expression return public ...

C 實現四則運算表示式的計算

輸入為乙個整數四則運算表示式,可以有括號。程式實現 這裡使用自己實現的棧類輔助操作 如下 include include include using namespace std 全域性變數 int priority tab 6 6 string operators 函式和類宣告 template c...