C语言编写四则运算
#includ e // 计算器
# in clud e 〈ma ll oc、h>
#def ine STACK_S IZE? 100? ? // ma x size of the stack
#define STACK_INCREMENT 10? //rea lloc size
typed ef st ruc t FStack // stac k of int
{
? float * base;
float * top ;
? in t st acksi ze;
} F St ack ;
v oid Ini t( FStack * s)
{
? s—>b ase = ( flo at *) mallo c (STACK_SIZE* siz eof (FStack) );
if ( !s-> base )
? {
? ? p ri nt f( ”over flow!\n ”);
? ? re turn ;
? }
? s- >t op = s— > base;
? s- >s tac ksize = STACK_SIZE;
}
boo l isEmp ty( FStac k* s )
{
? i f (s- 〉to p == s— 〉ba se)
? {
? ? re tu rn true ;
}
? else
{
? ? retu rn false ;
? }
}
voi d Push( FStack* s , f loa t e)
{
if (s- 〉t op - s—> base >= s- 〉stac ksize )
? {
? ? p rintf (”st ack i s full!\n realloc %d\n" , STACK_ INCREM
ENT);
? s— 〉 ba se = ( flo at *) reall oc (s-> base, ( s—>stacksi ze +
sizeof ( F Stack)) );
? ? if (!s— >base)
? ? {
? ? ? p rin tf ( "ov erfl ow!\n ”);
? ? r et ur n;
? ? }
? s -> top = s -〉 ba se + s—>s tacksize ;
? s- > st acksi ze += STACK_INCREMENT;
}
*( s-> t op) = e;
(s— >to p)++;
}
fl oat GetT op (FSt ack* s)
{
? i f ( s—> top = = s— 〉b as e)
? {
? prin tf( ”stac k i s emp ty !\n ");
? return 0;
? }
? float e = *( s->top - 1);
retu rn e;
}
v oid Pop( FS tack * s)
{
if (s ->top == s— > ba se)
{
? pr int f( ”s tack is emp ty !\n ");
re tu rn;
? }
? s- 〉top —— ;
}
typede f st ruc t CSta ck / /st ack of cha r
{
char * base;
c har * top ;
i nt stac ksi ze;
} CStack ;
void Init (CStac k* s )
{
s-> base = (