GTK+ 2.0 教学-双向链结串列

以下的函式用于创建、管理和销毁标准双向链结串列。串列中每个元素都包含一块资料和指向前后元素的指标。这使得通过串列的双向移动变的容易。资料项目的型别是 “gpointer”,意指资料可为一指向实际资料的指标或 (通过型态转换) 为一数值(但不要假设 int 和 gpointer 有相同的大小!)。这些函式在内部以区块的方式配置串列元素,这比单独地配置每个元素更有效率。

不存在专用于创建链结串列的函式。而是简单地创建一个型别为 Glist* 的变数,并把它的值设置为 NULL;NULL被当作空串列。

向串列中加入一个新元素,使用函式 g_list_append()、g_list_prepend()、g_list_insert() 或 g_list_insert_sorted() 。无论如何,函式都接收一个指向串列开头的指标作为参数,并传回一个指向串列开头的指标(可能有变化)。因此,对所有添加或撤除元素的操作,一定要保存传回值!

GList *g_list_append( GList    *list,
                      gpointer  data );

此函式把一个新元素(具有值data)加到串列的尾巴。

GList *g_list_prepend( GList    *list,
                       gpointer  data );

此函式把一个新元素(具有值data)加到串列的开头。

GList *g_list_insert( GList    *list,
                      gpointer  data,
                      gint      position );

此函式插入一个新元素(具有值data)到串列中的指定位置,如果position是 0,它和 g_list_prepend() 函式作用相同,如果position小于0,它和 g_list_append() 函式作用相同。

GList *g_list_remove( GList    *list,
                      gpointer  data );

此函式从串列中移除一个具有值data的元素,如果该元素不存在,串列不变。

void g_list_free( GList *list );

此函式释放由Glist使用的所有记忆体,如果串列元素空间是通过动态配置记忆体得来的,则应首先被释放。

还有许多其它支持双向链结串列的Glib函式;查看文件获得更多的讯息。这儿列出几个更有用的函式数的宣告:

 GList *g_list_remove_link( GList *list,
                           GList *link );

GList *g_list_reverse( GList *list );

GList *g_list_nth( GList *list,
                   gint   n );

GList *g_list_find( GList    *list,
                    gpointer  data );

GList *g_list_last( GList *list );

GList *g_list_first( GList *list );

gint g_list_length( GList *list );

void g_list_foreach( GList    *list,
                     GFunc     func,
                     gpointer  user_data );

Comments are closed.