如何在C中的同一个ADT中使用多种数据类型?

时间:2017-07-06 21:30:12

标签: c data-structures struct

例如,如果我在C中定义了一个Stack ADT,通常我的类型定义 - 使用基于数组的实现 - 就像这样:

typedef char StackEntry;

typedef struct stack {
    int top;
    StackEntry entry[MAXSTACK];
} Stack;

如何使我的堆栈能够为一个堆叠的字符和另一个堆栈 - 在同一个程序中 - 例如处理整数?

2 个答案:

答案 0 :(得分:0)

您可以使用使用元素大小初始化的堆栈结构,并以字节为单位保留内存块以存储元素:

sqlalchemy.exc.InternalError: (psycopg2.InternalError) ALTER EXTERNAL TABLE cannot run inside a transaction block

答案 1 :(得分:0)

使用宏,例如

#define STACK_TYPE(type) struct { int top; type entry[MAXSTACK]; }

您最终可能会使用宏进行堆栈操作,例如push / pop:

#define STACK_PUSH(stack, value) \
    do { if ( (top) < MAXSTACK ) (stack).entry[(stack).top++] = (value); } while (0)

在大多数情况下,您不需要将堆栈类型作为宏参数传递,因为相同的语法适用于所有堆栈。

样本用法:

STACK_TYPE(int) mystack = { 0 };
STACK_PUSH(mystack, 5);

显然,你可以通过很多不同的方式来处理细节。