【发布时间】:2017-12-11 01:38:22
【问题描述】:
例如,如果我在 C 中定义了 Stack ADT,通常我的类型定义 - 使用基于数组的实现 - 是这样的:
typedef char StackEntry;
typedef struct stack {
int top;
StackEntry entry[MAXSTACK];
} Stack;
我怎样才能使我的堆栈,以便我可以有一个堆栈用于字符和另一个堆栈 - 在同一个程序中 - 例如处理整数?
【问题讨论】:
-
听起来你在谈论泛型。它们在 C 中不存在,但您可以通过宏在某种程度上模拟它们。
-
您必须使用宏来实现类似 C++ 模板之类的东西(因为这是 C 支持的唯一元编程工具)。
-
您可以为泛型类型实现它,只要它们具有相同的大小。 (非异构,即。或者:我们的指针和智能联合)
-
在创建特定的 ADT 实例时,通常通过提供所需的操作(以函数指针的形式)来完成,如赋值、比较、分配、释放等。
-
@melpomene 通用数据结构绝对可以在不使用宏的情况下在 C 中实现。
标签: c data-structures struct