泛型堆栈的c实现

本文介绍了一种泛型栈的实现方式,并通过具体示例展示了如何为不同数据类型创建和使用栈。代码示例包括整数和浮点数栈的操作,如压栈、弹栈及检查栈的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值