分享

GLIB库:操控链表数据

 217小月月坑 2015-02-15
函数列表:改变链表内容

#include <glib.h>

/* 向链表最后追加数据,应将修改过的链表赋给链表指针* /

GSList* g_slist_append(GSList* list,gpointer data)

/* 向链表最前面添加数据,应将修改过的链表赋给链表指针* /

GSList* g_slist_prepend(GSList* list,gpointer data)

/* 在链表的position位置向链表插入数据,应将修改过的链表赋给链表指针* /

GSList* g_slist_insert(GSList* list,gpointer data,gint position)

/ *删除链表中的data元素,应将修改过的链表赋给链表指针* /

GSList* g_slist_remove(GSList* list,gpointer data)

 

访问链表元素可以使用下面的函数列表中的函数。

这些函数都不改变链表的结构。

g_slist_foreach()对链表的每一项调用Gfunc函数。

Gfunc函数是像下面这样定义的:

typedef void (*GFunc)(gpointer data, gpointer user_data);

g_slist_foreach()中,Gfunc函数会对链表的每个list->data调用一次,将user_data传递到g_slist_foreach()数中。

 

例如, 有一个字符串链表,并且想创建一个类似的链表,让每个字符串做一些变换。

下面是相应的代码,使用了前面例子中的efficient_append()函数。

typedef struct _AppendContext AppendContext;

struct _AppendContext {

     GSList* list;

     GSList* list_end;

     const gchar* append;

} ;

static void append_foreach(gpointer data, gpointer user_data)

{

     AppendContext* ac = (AppendContext*) user_data;

     gchar* oldstring = (gchar*) data;

     efficient_append(&ac->list, &ac->list_end, g_strconcat(oldstring, ac->append, NULL));

}

GSList * copy_with_append(GSList* list_of_strings, const gchar* append)

{

     AppendContext ac;

     ac.list = NULL;

     ac.list_end = NULL;

     ac.append = append;

     g_slist_foreach(list_of_strings, append_foreach, &ac);

     return ac.list;

}

 

函数列表: 操纵链表

#include <glib.h>

/* 返回链表的长度* /

guint g_slist_length(GSList* list)

/* list1list2两个链表连接成一个新链表* /

GSList* g_slist_concat(GSList* list1,GSList* list2)

/ *将链表的元素颠倒次序* /

GSList* g_slist_reverse(GSList* list)

/ *返回链表list的一个拷贝* /

GSList* g_slist_copy(GSList* list)

 

还有一些用于对链表排序的函数,见下面的函数列表。要使用这些函数,必须写一个比较函数GcompareFunc,就像标准

 

C里面的qsort()函数一样。

glib里面,比较函数是这个样子:

typedef gint (*GCompareFunc) (gconstpointer a, gconstpointer b);

如果a < b,函数应该返回一个负值;如果a > b,返回一个正值;如果a = b,返回0

 

函数列表: 对链表排序

#include <glib.h>

GSList* g_slist_insert_sorted(GSList* list,gpointer data,GCompareFunc func)

GSList* g_slist_sort(GSList* list,GCompareFunc func)

GSList* g_slist_find_custom(GSList* list,gpointer data,GCompareFunc func)

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多