読者です 読者をやめる 読者になる 読者になる

トライ木でお手軽連想配列

http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%82%A4%E6%9C%A8
かんたん!

typedef struct TriTree_ {
  struct TriTree_ *children[256];
  void *value;
} TriTree;

TriTree *new_tri_tree(){
  int i;
  
  TriTree *t = malloc(sizeof(TriTree));
  for (i = 0; i < 256; i++) {
    t->children[i] = NULL;
  }
  t->value = NULL;
  
  return t;
}

void *tri_tree_get(TriTree *t, char *s)
{
  if(!t){
    return NULL;
  }
  if(s[0]){
    return tri_tree_get(t->children[s[0]], s+1);
  }else{
    return t->value;
  }
}

TriTree *tri_tree_set(TriTree *t, char *s, void *value)
{
  if(!t){
    t = new_tri_tree();
  }
  if(s[0]){
    t->children[s[0]] = tri_tree_set(t->children[s[0]], s+1, value);
  }else{
    t->value = value;
  }
  
  return t;
}

int main(void)
{
  TriTree *t = NULL;

  t = tri_tree_set(t, 文字列, 格納したいデータのポインタ);
  void *p = tri_tree_get(t, 文字列);
}