打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
GLIB库:创建链表

glib提供了普通的单向链表和双向链表,分别是GSListGList

 

创建链表、添加一个元素的代码:

GSList*list = NULL;

gchar*element = g_strdup("a string");

list= g_slist_append(list, element);

删除上面添加的元素并清空链表:

list= g_slist_remove(list, element);

为了清除整个链表,可使用g_slist_free(),它会快速删除所有的链接;

g_slist_free()只释放链表的单元,它并不知道怎样操作链表内容。

 

访问链表的元素,可以直接访问GSList结构:

gchar*my_data = list->data;

为了遍历整个链表,可以如下操作:

GSList*tmp = list;

while(tmp != NULL)

{

     printf("Listdata: %p/n", tmp->data);

     tmp= g_slist_next(tmp);

}

 

下面的代码可以用来有效地向链表中添加数据:

voidefficient_append(GSList** list, GSList** list_end, gpointer data)

{

    g_return_if_fail(list!= NULL);

    g_return_if_fail(list_end!= NULL);

     if(*list == NULL)

     {

       g_assert(*list_end== NULL);

       *list= g_slist_append(*list, data);

       *list_end= *list;

     }

     else

    

       *list_end= g_slist_append(*list_end, data)->next;

     }

}

 

要使用这个函数,应该在其他地方存储指向链表和链表尾的指针,并将地址传递给efficient_append()

GSList*list = NULL;

GSList*list_end = NULL;

efficient_append(&list,&list_end, g_strdup("Foo"));

efficient_append(&list,&list_end, g_strdup("Bar"));

efficient_append(&list,&list_end, g_strdup("Baz"));


函数列表:访问链表中的数据

#include<glib.h>

GSList*g_slist_find(GSList* list,gpointer data)

GSList*g_slist_nth(GSList* list,guint n)

gpointerg_slist_nth_data(GSList* list,guint n)

GSList*g_slist_last(GSList* list)

gintg_slist_index(GSList* list,gpointer data)

voidg_slist_foreach(GSList* list,GFunc func,gpointer user_data)


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
linux 开发指南-3 - 磨练
GLIB中GHashTable——哈希表的介绍
GLib介绍与使用
D-Bus学习(八):利用XML定义D-Bus之Server的例子
glib学习笔记2 使用glib链表
gtk+ 编程实例 简易的文件浏览器
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服