函数列表:改变链表内容
#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) /* 将list1和list2两个链表连接成一个新链表* / 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)
|
|