GTK Gossip: GSList、GList
2010-12-10 15:22
239 查看
GSList是一個單向鏈結(Link)的節點,其定義如下:
typedef struct {
gpointer data;
GSList *next;
} GSList;
data是節點資料(物件)的位址資訊,next是下一個節點資料的位址資訊,搭配 GSList
的相關函式,您可以簡單的進行鏈結節點的附加、插入、刪除等動作,例如使用g_slist_append()、g_slist_prepend()附加節點,使用g_slist_sort()進行排序等。
下面這個程式是個簡單的示範,使用GSList實作堆疊:
gslist_demo.c
一個執行的結果如下所示:
GList則是雙向鏈結,其定義如下:
typedef struct {
gpointer data;
GList *next;
GList *prev;
} GList;
prev是指向前一個節點,關於其搭配使用的函式,可參考 GList
說明文件。
typedef struct {
gpointer data;
GSList *next;
} GSList;
data是節點資料(物件)的位址資訊,next是下一個節點資料的位址資訊,搭配 GSList
的相關函式,您可以簡單的進行鏈結節點的附加、插入、刪除等動作,例如使用g_slist_append()、g_slist_prepend()附加節點,使用g_slist_sort()進行排序等。
下面這個程式是個簡單的示範,使用GSList實作堆疊:
gslist_demo.c
#include <glib.h> void for_callback(GString *string, gpointer user_data) { if(string) { printf("%s/n", string->str); } } int main(int argc, char *argv[]) { GString *string; GSList *list; int select; char input[10]; list = NULL; // 一開始是沒有節點的 while(TRUE) { printf( "/n請輸入選項(-1結束): (1)新增至堆疊 (2)刪除頂端值 (3)顯示所有內容"); printf("/n$c>"); scanf("%d", &select); if(select == -1) { break; } switch(select) { case 1: printf("/n輸入值:"); scanf("%s", &input); string = g_string_new(input); list = g_slist_prepend(list, string); break; case 2: string = list->data; list = g_slist_remove(list, string); printf("/n頂端值移除:%s", string->str); break; case 3: g_slist_foreach(list, (GFunc) for_callback, NULL); break; default: printf("/n選項錯誤!"); } } printf("/n"); g_slist_free(list); return 0; }
一個執行的結果如下所示:
請輸入選項(-1結束): (1)新增至堆疊 (2)刪除頂端值 (3)顯示所有內容 $c>1 輸入值:caterpillar 請輸入選項(-1結束): (1)新增至堆疊 (2)刪除頂端值 (3)顯示所有內容 $c>1 輸入值:momor 請輸入選項(-1結束): (1)新增至堆疊 (2)刪除頂端值 (3)顯示所有內容 $c>1 輸入值:bush 請輸入選項(-1結束): (1)新增至堆疊 (2)刪除頂端值 (3)顯示所有內容 $c>3 bush momor caterpillar 請輸入選項(-1結束): (1)新增至堆疊 (2)刪除頂端值 (3)顯示所有內容 $c>2 頂端值移除:bush 請輸入選項(-1結束): (1)新增至堆疊 (2)刪除頂端值 (3)顯示所有內容 $c>-1 |
typedef struct {
gpointer data;
GList *next;
GList *prev;
} GList;
prev是指向前一個節點,關於其搭配使用的函式,可參考 GList
說明文件。
相关文章推荐
- glib中的GList ,GSList,GString,GTree,GTimer
- GTK Gossip: GtkTreeView 與 GtkListStore
- GTK Gossip: GtkHBox 與 GtkVBox
- GTK Gossip: GtkPaned
- Qt4 Gossip: 循序容器(QVector、QLinkedList、QList...) - 转
- GTK Gossip: GtkFrame 與 GtkButtonBox
- GTK Gossip: GtkColorButton 與 GtkColorSelectionDialog
- GTK Gossip: GtkAlignment、GtkFixed 與 GtkLayout
- GTK Gossip: GtkDrawingArea
- GTK Gossip: GtkFontButton 與 GtkFontSelectionDialog
- GTK Gossip: GLib 基本型態與巨集
- JSF Gossip: Beans 上的 List、Map
- GTK Gossip: GtkFileChooserButton 與 GtkFileChooserDialog
- GTK Gossip: GtkHandleBox
- GTK Gossip: GTimer
- GTK Gossip: GtkScrolledWindow
- Qt4 Gossip: 循序容器(QVector、QLinkedList、QList...) - 转
- GTK Gossip: Ubuntu 下安裝 GTK
- GTK Gossip: GtkMenuBar、GtkMenu 與 GtkMenuItem
- GTK Gossip: 環境資訊