Friday, July 22, 2005

glib で rb木 を作るサンプル


#include

gint compare(int m, int n);
gint node_print(int key, int val, gpointer dummy);

int main(void){

GNode* tree;
int array[]= {13,2,26,215,7864,4,1,87};
int i,len;
tree= g_tree_new (compare);

len= sizeof(array) / sizeof(int);

for(i= 0; i < len; i++){
g_tree_insert(tree, array[i], array[i]);
}

g_tree_traverse(tree, node_print, G_IN_ORDER, NULL);
printf("\n");

return 0;
}

/* 比較関数、新しく入れたデータのkeyが第一引数、ノードのkeyが第2引数に入る。
* 返す値が マイナスだと左の枝へ進んで行く。
*/
gint compare(int m, int n){
return (gint) (m - n);
}

/* traverse func */
/* g_tree_traverse() で各ノードで呼出される関数。
* 正の値を返すとtraverseが終了するので注意。*/
gint node_print(int key, int val, gpointer dummy){
printf("%d ", val);
return 0;
}

0 Comments:

Post a Comment

<< Home