GSList是一個單向鏈結(Link)的節點,其定義如下:
typedef struct {
gpointer data;
GSList *next;
} GSList;
      
      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
      
      \$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
GList則是雙向鏈結,其定義如下:
typedef struct {
gpointer data;
GList *next;
GList *prev;
} GList;
      
      gpointer data;
GList *next;
GList *prev;
} GList;
prev是指向前一個節點,關於其搭配使用的函式,可參考 GList 說明文件。

