以下的函式用於創建、管理和銷毀標準雙向鏈結串列。串列中每個元素都包含一塊資料和指向前後元素的指標。這使得通過串列的雙向移動變的容易。資料項目的型別是 “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 ); |
1 則留言