GTK Gossip: GTree 與 GNode

GTree 實現了平衡二元樹結構,在新增資料時會自動進行排序,並嘗試維持樹的高度與平衡,您可以利用Key來儲存資料至樹中,並利用Key來快速取得資料。

直接來看個簡單的例子:
  • gtree_demo.c
#include <glib.h>

gint key_compare_func(gconstpointer a, gconstpointer b) {
return g_strcmp0(a, b);
}

gboolean traverse_func(gpointer key, gpointer value, gpointer data) {
g_print("key/t: %s/nvalue/t: %s/n/n", key, value);
return FALSE;
}

int main(int argc, char *argv[]) {
GTree *tree;

tree = g_tree_new(key_compare_func);
g_tree_insert(tree, "justin", "justin's message!!");
g_tree_insert(tree, "momor", "momor's message!!");
g_tree_insert(tree, "caterpillar", "caterpillar's message!!");

g_tree_foreach(tree, traverse_func, NULL);

g_tree_destroy(tree);

return 0;
}

這個程式會建立一個平衡二元樹,利用指定的key_compare_func比較Key的大小,在這邊利用 g_strcmp0()來比較字串順序,程式中插入三筆資料,插入的資料會自動依Key排序,所以取回時會是排序後的結果:
key     : caterpillar
value   : caterpillar's message!!

key     : justin
value   : justin's message!!

key     : momor
value   : momor's message!!


GNode則是另一種允許您建立任意分枝節點的樹結構,其定義如下:
typedef struct {
  gpointer data;
  GNode *next;
  GNode *prev;
  GNode *parent;
  GNode *children;
} GNode;

其中parent、children為父子節點,prev、next是兄弟節點,其關係如下圖所示:






 

009國際電話大回饋
歲末年終就是要快樂時光快樂講,現在透過網路申辦不只全天候不分時段優惠價,還有iPad等超級大獎等你抱回家!
更多訊息..
全台最大無障礙生活趨勢館免費入場
有一天我們會變老有些事必須先知道全台最大無障礙生活趨勢館12/16~19世貿三館。
更多訊息..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值