c - 理解给定的头文件

标签 c pointers struct

我从大学计算机科学类(class)中接到任务,根据给定的头文件构建二叉搜索树。 但是,我不太明白其中的函数,它是指针和结构体的混合。

这是头文件:

#ifndef GENBST_H
#define GENBST_H
#include <stdio.h>
#include <stdlib.h>
typedef void* Elm;
typedef void* BST;
typedef void* BST_ROOT;
typedef enum {SUCEESS, OUT_OF_MEM, BAD_ARGS, FAILURE } Result;
BST_ROOT BSTCreate( Elm root_val, Elm (*create_elm)(),
    void (*cpy_elm) (Elm,Elm),
    int (*cmp_elm) (Elm, Elm),
    void (*free_elm)(Elm) );
void BSTDestroy (BST_ROOT root);
Result BSTAddElement (BST_ROOT root, Elm node);
Result BSTRemoveElement (BST_ROOT root, Elm node);
Elm BSTFindElement (BST_ROOT root, Elm node);
#endif

你能帮我弄清楚每个函数的含义吗? 具体在BSTCreate函数中?

最佳答案

我无法对此给出完整的答案,但我希望这个解释能对您有所帮助。

首先,正如 Magix 的评论中所说,头文件中没有函数定义,但是头文件为您提供了接口(interface)应该如何的规范。它指定了函数原型(prototype)和变量类型,给定这些,您应该能够实现 BST。

尝试写下一个算法,看看是否可以使用此 header 中声明的所有原型(prototype)来实现它。 这么说,如果有两行解释会有很大帮助;)

让我们看一下标题的每一部分! 首先,您会获得树中的元素和 BST 的类型:

typedef void* Elm;
typedef void* BST;
typedef void* BST_ROOT;

然后枚举指定您可以使用的某些返回类型的值:

typedef enum {
 SUCCESS,           // 0 (I corrected the spell)
 OUT_OF_MEM,        // 1
 BAD_ARGS,          // 2
 FAILURE            // 3
} Result;        

在这里你明白你必须提供一个创建 BST 的函数。

BST_ROOT BSTCreate( 
    Elm root_val, 
    Elm  (*create_elm)(),
    void (*cpy_elm) (Elm,Elm),
    int  (*cmp_elm) (Elm, Elm),
    void (*free_elm)(Elm) );

该函数必须使用其他四个函数:

    Elm  (*create_elm)(),
    void (*cpy_elm) (Elm,Elm),
    int  (*cmp_elm) (Elm, Elm),
    void (*free_elm)(Elm)

最后你还应该提供一组函数来修改 BST:

void BSTDestroy (BST_ROOT root);
Result BSTAddElement (BST_ROOT root, Elm node);
Result BSTRemoveElement (BST_ROOT root, Elm node);
Elm BSTFindElement (BST_ROOT root, Elm node);

关于c - 理解给定的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34743735/

相关文章:

c - 如何使用预处理器计算日志

c++ - 使指向基类指针的 std::vector 的指针指向派生类指针的 std::vector

c - "expected specifier-qualifier-list before ‘*’ token “可变参数函数中的错误

c - 使用 C 中的指针交换结构体内部二维数组的行

c - Root 执行 RDMSR 汇编代码时出现段错误

c - 在C中检测文件系统

c - 你如何用 C 语言解释这个类似函数的宏 `slice` 的输出?

c - 指针访问方法比数组索引更快吗?

jquery - IE8 和 jQuery 空指针

pointers - 在结构中初始化字符串指针