Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将两个单独的ADT合并为一个_Java_C_Binary Search Tree_Abstract Data Type - Fatal编程技术网

Java 将两个单独的ADT合并为一个

Java 将两个单独的ADT合并为一个,java,c,binary-search-tree,abstract-data-type,Java,C,Binary Search Tree,Abstract Data Type,嘿,伙计们,我正试着开始我的计算机科学作业(第二年的计算机科学论文) 在本课程中,我们创建了一个二叉搜索树ADT和一个红黑树ADT。我们必须将它们组合成一个更通用的“树”ADT,它将根据用户输入选择红黑树或二叉搜索树 我首先定义了一个新的枚举类型;可设置为RBT或BST的树类型\u t。。。我的第一个问题是如何声明结构,因为我不知道将选择哪个ADT?e、 g.在我的bst.c文件中,我有: struct bstnode { char *key; bst left; bst ri

嘿,伙计们,我正试着开始我的计算机科学作业(第二年的计算机科学论文)

在本课程中,我们创建了一个二叉搜索树ADT和一个红黑树ADT。我们必须将它们组合成一个更通用的“树”ADT,它将根据用户输入选择红黑树或二叉搜索树

我首先定义了一个新的枚举类型;可设置为RBT或BST的树类型\u t。。。我的第一个问题是如何声明结构,因为我不知道将选择哪个ADT?e、 g.在我的bst.c文件中,我有:

struct bstnode {
   char *key;
   bst left;
   bst right;
};
struct rbtnode {
   char *key;
   colour_t colour;
   rbt left;
   rbt right;
};
在我的RBT文件中,我有:

struct bstnode {
   char *key;
   bst left;
   bst right;
};
struct rbtnode {
   char *key;
   colour_t colour;
   rbt left;
   rbt right;
};
我的第一个想法是创建一个if语句,比如

  if (treetype_t == RBT){
           struct rbtnode {
       char *key;
       colour_t colour;
       rbt left;
       rbt right;
    };
   }
     else{

         struct bstnode {
       char *key;
       bst left;
       bst right;
    };
}

但是我认为这不起作用。。。我想不出另一种方法-有什么想法吗?

结构定义不能像在代码中那样在运行时更改。您只能在编译时使用预处理器的#if/#ifdef指令更改它们,但这还为时过早,因为此时您还没有用户输入(除非用户可以直接修改源代码并重新编译)

您可以使用union关键字将这些结构组合成一个:

struct rbtnode {
    char *key;
    colour_t colour;
    rbt left;
    rbt right;
};

struct bstnode {
    char *key;
    bst left;
    bst right;
};

union bst_or_rbt_node {
    struct bstnode bst_node;
    struct rbtnode rbt_node;
};
然后根据用户输入使用联合的rbt_节点成员或bst_节点成员

确保为bst\u或\u rbt\u节点分配足够的空间(最安全的方法是使用sizeof(bst\u或\u rbt\u节点))

另外,我希望rbt和bst是指针类型

没有必要使用联合,但在您当前的级别上,处理联合可能比使用指向void、指针强制转换的指针要容易一些