#include <stdio.h>
#include <glib.h>
#define null NULL;
typedef struct{
char* name;
int shoe_size;
}TPerson;
void display_list(GSList *list)
{
GSList *iterator = NULL;
for (iterator = list; iterator; iterator = iterator->next) {
printf("%s ", (char*)iterator->data);
}
printf("\n");
}
/**
* 迭代器
*
*/
void print_iterator(gpointer item, gpointer prefix) {
printf("%s %s\n", prefix, item);
}
void print_iterator_short(gpointer item) {
printf("%s\n", item);
}
void print_TPerson(gpointer item) {
printf("姓名\t鞋子大小\n");
printf("%s\t%d\n", ((TPerson*)item)->name,((TPerson*)item)->shoe_size);
}
/**
* 字符串比较
*/
int my_str_cmp(gconstpointer str1, gconstpointer str2)
{
return strcmp(str1, str2);
}
int main(int argc ,char** argv)
{
GSList* list=null;
g_printf("list长度=%d\n",g_slist_length(list));
list=g_slist_append(list,"one");
list=g_slist_append(list,"two");
g_printf("list长度=%d\n",g_slist_length(list));
list=g_slist_append(list,"three");
list=g_slist_remove(list,"two");
display_list(list);
list = g_slist_insert_sorted(list, "any", my_str_cmp);//向链表中插入节点并排序
display_list(list);
list = g_slist_insert_sorted(list, "bb", my_str_cmp);
list = g_slist_insert_sorted(list, "bb", my_str_cmp);
display_list(list);
list=g_slist_remove(list,"bb"); // 删除单个
list=g_slist_remove_all(list,"bb"); //删除所有
display_list(list);
//链表返转
list=g_slist_prepend(list,"1111");
list = g_slist_reverse(list);
display_list(list);
printf("使用迭代器打印单向链表各值\n");
g_slist_foreach(list,(GFunc)print_iterator,"-->");
//单向链表组合
GSList* list2 = NULL;
list2 = g_slist_append(list2, "third");
list2 = g_slist_append(list2, "fourth");
GSList* both = g_slist_concat(list, list2);
printf("使用迭代器打印组合后的单向链表各值\n");
g_slist_foreach(both,(GFunc)print_iterator_short,"-->");
//自定义类型list
GSList *pesonList=null;
TPerson* pei =(TPerson *)malloc(sizeof(TPerson));
pei->name="裴老五";
pei->shoe_size=12;
pesonList=g_slist_append(pesonList,pei);
TPerson* pei2=g_new(TPerson,1);//分配一个对象的内存
pei2->name="裴老五2";
pei2->shoe_size=11;
pesonList=g_slist_append(pesonList,pei2);
printf("pei1.name=%s\n",((TPerson*)g_slist_last(pesonList)->data)->name);
g_slist_free(list);
g_slist_free(pesonList);
return 0;
}
#include <glib.h>
#define null NULL;
typedef struct{
char* name;
int shoe_size;
}TPerson;
void display_list(GSList *list)
{
GSList *iterator = NULL;
for (iterator = list; iterator; iterator = iterator->next) {
printf("%s ", (char*)iterator->data);
}
printf("\n");
}
/**
* 迭代器
*
*/
void print_iterator(gpointer item, gpointer prefix) {
printf("%s %s\n", prefix, item);
}
void print_iterator_short(gpointer item) {
printf("%s\n", item);
}
void print_TPerson(gpointer item) {
printf("姓名\t鞋子大小\n");
printf("%s\t%d\n", ((TPerson*)item)->name,((TPerson*)item)->shoe_size);
}
/**
* 字符串比较
*/
int my_str_cmp(gconstpointer str1, gconstpointer str2)
{
return strcmp(str1, str2);
}
int main(int argc ,char** argv)
{
GSList* list=null;
g_printf("list长度=%d\n",g_slist_length(list));
list=g_slist_append(list,"one");
list=g_slist_append(list,"two");
g_printf("list长度=%d\n",g_slist_length(list));
list=g_slist_append(list,"three");
list=g_slist_remove(list,"two");
display_list(list);
list = g_slist_insert_sorted(list, "any", my_str_cmp);//向链表中插入节点并排序
display_list(list);
list = g_slist_insert_sorted(list, "bb", my_str_cmp);
list = g_slist_insert_sorted(list, "bb", my_str_cmp);
display_list(list);
list=g_slist_remove(list,"bb"); // 删除单个
list=g_slist_remove_all(list,"bb"); //删除所有
display_list(list);
//链表返转
list=g_slist_prepend(list,"1111");
list = g_slist_reverse(list);
display_list(list);
printf("使用迭代器打印单向链表各值\n");
g_slist_foreach(list,(GFunc)print_iterator,"-->");
//单向链表组合
GSList* list2 = NULL;
list2 = g_slist_append(list2, "third");
list2 = g_slist_append(list2, "fourth");
GSList* both = g_slist_concat(list, list2);
printf("使用迭代器打印组合后的单向链表各值\n");
g_slist_foreach(both,(GFunc)print_iterator_short,"-->");
//自定义类型list
GSList *pesonList=null;
TPerson* pei =(TPerson *)malloc(sizeof(TPerson));
pei->name="裴老五";
pei->shoe_size=12;
pesonList=g_slist_append(pesonList,pei);
TPerson* pei2=g_new(TPerson,1);//分配一个对象的内存
pei2->name="裴老五2";
pei2->shoe_size=11;
pesonList=g_slist_append(pesonList,pei2);
printf("pei1.name=%s\n",((TPerson*)g_slist_last(pesonList)->data)->name);
g_slist_free(list);
g_slist_free(pesonList);
return 0;
}