glib单向列表

#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;
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值