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 );

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *