/* ECP: FILEname=fig10_8.c */ /* 1*/ int /* 2*/ StIsEmpty( const Stack S ) /* 3*/ { /* 4*/ StInsistGood( S ); /* 5*/ return S->TopOfStack == -1; /* 6*/ } /* 1*/ void /* 2*/ Push( StEtype X, Stack S ) /* 3*/ { /* 4*/ StInsistGood( S ); /* 5*/ if( ++S->TopOfStack == S->MaxSize ) /* 6*/ { /* 7*/ S->MaxSize *= 2; /* 8*/ S->Array = realloc( S->Array, /* 9*/ sizeof( StEtype ) * S->MaxSize ); /*10*/ if( S->Array == NULL ) /*11*/ { /*12*/ printf( "Can not extend the stack\n" ); /*13*/ exit( -1 ); /*14*/ } /*15*/ } /*16*/ S->Array[ S->TopOfStack ] = X; /*17*/ } /* 1*/ void /* 2*/ Pop( Stack S ) /* 3*/ { /* 4*/ if( StIsEmpty( S ) ) /* 5*/ printf( "Error: can not pop an empty stack\n" ); /* 6*/ else /* 7*/ S->TopOfStack--; /* 8*/ } /* 1*/ StEtype /* 2*/ Top( const Stack S ) /* 3*/ { /* 4*/ if( StIsEmpty( S ) ) /* 5*/ printf( "Error: can not top an empty stack\n" ); /* 6*/ else /* 7*/ return S->Array[ S->TopOfStack ]; /* 8*/ }