美文网首页
Chapter 17 Classic Abstract Data

Chapter 17 Classic Abstract Data

作者: 再凌 | 来源:发表于2020-03-02 12:56 被阅读0次

抽象类型声明实例

在本例中,将列出一个完整的栈
特点:

  1. 类型无关
  2. 同一个类型的可以声明多次
  3. 使用#define完成以上特性
  4. 使用assert断言完成合法性检查
//stack.c
#include<assert.h>
#
#define GENERATE_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( STACK_TYPE value)                 \
    {                                                   \
        assert(!is_empty##SUFFIX());                    \
        top_element##SUFFIX -= 1;                       \
    }                                                   \
                                                        \
    STACK_TYPE top##SUFFIX( void)                       \
    {                                                   \
        assert(!is_empty##SUFFIX());                    \
        return stack##SUFFIX[top_element##SUFFIX];      \
    }                                                   \
                        
                        
                        
//main.c
#include<stdio.h>
#include<stdlib.h>
#include"stack.h"

GENERATE_STACK(int,_int_1,10)
GENERATE_STACK(float,_float_1,5)
int main()
{
push_int_1(5);
push_float_1(0.3);
 } 

相关文章

网友评论

      本文标题:Chapter 17 Classic Abstract Data

      本文链接:https://www.haomeiwen.com/subject/lbhmkhtx.html