您的位置:首页 > 编程语言 > Go语言

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

#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

GList則是雙向鏈結,其定義如下:

typedef struct {

gpointer data;

GList *next;

GList *prev;

} GList;

prev是指向前一個節點,關於其搭配使用的函式,可參考 GList
說明文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: