C语言编写四则运算
C语言编写四则运算
#include //计算器
#include
#define STACK_SIZE100//max size of the stack
#define STACK_INCREMENT10//realloc size
typedef struct FStack //stack of int
{
float* base;
float* top;
int stacksize;
}FStack;
void Init(FStack* s)
{
s->base = (float*)malloc(STACK_SIZE * sizeof(FStack));
if (!s->base)
{
printf("overflow!\n");
return;
}
s->top = s->base;
s->stacksize = STACK_SIZE;
}
bool isEmpty(FStack* s)
{
if (s->top == s->base)
{
return true;
}
else
{
return false;
}
}
void Push(FStack* s, float e)
{
if (s->top - s->base >= s->stacksize)
{
printf("stack is full!\nrealloc %d\n", STACK_INCREMENT);
s->base = (float*)realloc(s->base, (s->stacksize + sizeof(FStack)));
if (!s->base)
{
printf("overflow!\n");
return;
}
s->top = s->base + s->stacksize;
s->stacksize += STACK_INCREMENT;
}
*(s->top) = e;
(s->top)++;
}
float GetTop(FStack* s)
{
if (s->top == s->base)
{
printf("stack is empty!\n");
return 0;
}
float e = *(s->top - 1);
return e;
}
void Pop(FStack* s)
{
if (s->top == s->base)
{
printf("stack is empty!\n");
return;
}
s->top--;
}
typedef struct CStack //stack of char
{
char* base;
char* top;
int stacksize;
}CStack;
void Init(CStack* s)
{
s->base = (char*)malloc(STACK_SIZE * sizeof(CStack));
if (!s->base)
{
printf("overflow!\n");
return;
}
s->top = s->base;
s->stacksize = STACK_SIZE;
}
bool isEmpty(CStack* s)
{
if (s->top == s->base)
{
return true;
}
else
{
return false;
}
}
void Push(CStack* s, int e)
{
if (s->top - s->base >= s->stacksize)
{
printf("stack is full!\nrealloc %d\n", STACK_INCREMENT);
s->base = (char*)realloc(s->base, (s->stacksize + sizeof(CStack)));
if (!s->base)
{
printf("overflow!\n");
return;
}
s->top = s->base + s->stacksize;
s->stacksize += STACK_INCREMENT;
}
*(s->top) = e;
(s->top)++;
}
char GetTop(CStack* s)
{
if (s->top == s->base)
{
printf("stack is empty!\n");
return 0;
}