Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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
C 实现功能结构:使用什么数据类型?_C_Data Structures - Fatal编程技术网

C 实现功能结构:使用什么数据类型?

C 实现功能结构:使用什么数据类型?,c,data-structures,C,Data Structures,简单来说,特征结构是属性值对的无序列表 [number:sg, person:3 | _ ], 可嵌入以下内容: [cat:np, agr:[number:sg, person:3 | _ ] | _ ], 是否可以对内容进行子索引并共享值 [number:[1], person:3 | _ ], 其中[1]是另一个特性结构(即,它允许重入) 我的问题是:人们认为应该用什么样的数据结构来实现这一点,以便以后访问值,在两个fts之间执行统一,并“键入”它们,等等 关于这方面有一本完整的书,

简单来说,特征结构是属性值对的无序列表

[number:sg, person:3 | _ ],
可嵌入以下内容:

 [cat:np, agr:[number:sg, person:3 | _ ] | _ ],
是否可以对内容进行子索引并共享值

[number:[1], person:3 | _ ],
其中[1]是另一个特性结构(即,它允许重入)

我的问题是:人们认为应该用什么样的数据结构来实现这一点,以便以后访问值,在两个fts之间执行统一,并“键入”它们,等等


关于这方面有一本完整的书,但它是用lisp编写的,它简化了列表处理。因此,我的选择是:列表哈希、列表列表或trie。人们对此有何看法?

更仔细地思考价值的构成。 我会尝试可能有效的最简单的方法:

typedef struct value {
   enum { INT, BOOL, STRING, FEATURE_STRUCTURE } ty;
   union {
     int int;
     bool bool;
     char *string;
     struct fs *feature_structure;
   } u;
} *Value;

typedef struct fs * { // list of pairs; this rep could change
    struct avpair *pair;
    Value value;
} *Feature_Structure;

struct avpair {
   const char *attribute;
   Value value;
};
您将需要一组构造函数,如

Value mkBool(bool p) {
  Value v = malloc(sizeof(*v));
  assert(v);
  v->ty = BOOL;
  v->u.bool = p;
  return v;
}
在这一点上,你可以开始做生意了。如果“成对列表”不是正确的表示形式,您可以更改它。在不知道您计划什么运营或您对成本模型的期望值的情况下,我将从这里开始。然后,如果您需要更高效的方法,我可能会使用三元搜索树表示一个功能结构,并对
值保持相同的表示形式