泛型堆栈的c实现...
时间:2010-08-12 来源:dingyuanpu
f_stack.h:
#include <assert.h>
#define GENERIC_STACK( STACK_TYPE, SUFFIX, STACK_SIZE ) \
\
static STACK_TYPE stack##SUFFIX[ STACK_SIZE ]; \
static int top_element##SUFFIX = -1; \
\
int is_empty##SUFFIX( void ) \
{ \
return top_element##SUFFIX == -1; \
} \
\
int is_full##SUFFIX( void ) \
{ \
return top_element##SUFFIX == STACK_SIZE-1; \
} \
\
void push##SUFFIX( STACK_TYPE value ) \
{ \
assert( !is_full##SUFFIX() ); \
top_element##SUFFIX += 1; \
stack##SUFFIX[ top_element##SUFFIX ] = value; \
} \
\
void pop##SUFFIX( void ) \
{ \
assert( !is_empty##SUFFIX() ); \
top_element##SUFFIX -= 1; \
} \
\
STACK_TYPE top##SUFFIX( void ) \
{ \
assert( !is_empty##SUFFIX() ); \
return stack##SUFFIX[ top_element## SUFFIX ]; \
}
test.c:
#include <stdio.h>
#include "f_stack.h"
GENERIC_STACK( int, _int, 10 )
GENERIC_STACK( float, _float, 5 )
int main()
{
push_int( 5 );
push_int( 22 );
push_int( 15 );
push_float( 25.3 );
push_float( -40.5 );
while( !is_empty_int() )
{
printf("Popping %d\n", top_int());
pop_int();
}
printf("\n");
while( !is_empty_float() )
{
printf("Popping %f\n", top_float());
pop_float();
}
return 0;
}