刚刚学习C语言的时候我们都写过计算器,但是当时写的计算器只能进行一步四则运算,对于一次输入类似这种(1+2)*3+4的运算则没有办法计算。
本篇博客利用栈这种数据结构实现了支持带括号的表达式求值计算器。
C语言实现表达式求值的完整代码
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
typedef int ElemType;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct {
ElemType* base;
ElemType* top;
int stacksize;
}sqStack;
void InitStack(sqStack* s){
s->base = (ElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if (!s->base){
exit(1);
}
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
}
void Push(sqStack* s, ElemType e){
if (s->top - s->base >= s->stacksize){
s->base = (ElemType*)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(ElemType));
if (!s->base){
exit(1);
}
s->top = s->base + s->stacksize;
s->stacksize += STACKINCREMENT