C语言编写四则运算
#include //计算器
#include
#define STACK_SIZE 100 //max size of the stack
#define STACK_INCREMENT 10 //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)
{
1
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)
2
{
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->t