我尝试在C中构建ADT。例如,在实现包含int
类型元素的堆栈时。我将typedef int item_t
放在头文件中,这样我只能更改一行来使用相同的堆栈来存储double
元素。
当我实现二叉树时,我使用相同的技能。例如,我在node.h
中声明了一个节点,如下所示
typedef struct node_t *link_t;
typedef int item_t;
struct node_t {
item_t item;
link_t left;
link_t right;
};
现在,我在typedef int item_t
中使用node.h
。如果我想使用堆栈来存储link_t
中声明的node.h
类型的元素,并将它们视为item_t
。我该怎么办?
我不能在stack.h中执行以下操作
#include "node.h"
typedef link_t item_t;
因为我在node.h中有typedef item_t,编译器会抱怨。 conflicting types for ‘item_t’
答案 0 :(得分:1)
使用C语言制作ADT既简单又有趣,并且具有良好的学习体验。但是,您无法在任何可以重用于不同ADT的基于C语言中创建真正通用的ADT,您必须为每个ADT创建单独的结构。
答案 1 :(得分:0)
您将无法通过广泛的复制粘贴解决此问题。如果您想根据此处的link_t
模型在BST中存储三个node_t
,那么您必须使用新名称定义新结构。 (您也可以使用工会在BST的每个元素中存储link_t
或item_t
,但这可能会因您的目的而过于复杂。)
答案 2 :(得分:0)
不,你要做的不合逻辑。你告诉编译器将2个不同的东西(int和link_t)输入到1个东西(item_t)。那没有意义。