泛型堆栈的c实现

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;

}

你可能感兴趣的:(c,float)