【cdk的使用】 C语言 零拷贝 链表 队列 栈的使用

【cdk的使用】 C语言 零拷贝 链表 队列 栈的使用,第1张

Github地址: https://github.com/wujin1989/cdk

cdk的 list 是基于双向循环链表实现,queue 和 stack 基于 list实现。


所以cdk用一个双向循环链表实现了三种数据结构


如何使用cdk的链表:

#include "cdk.h"

typedef struct T {
	list_node_t node;
	int         numb;
}T;

int main(void) {

	list_t Tlist;
	cdk_list_create(&Tlist);

    //插入10个T类型元素到链表
	for (int i = 0; i < 10; i++) {

		T* t = malloc(sizeof(T));
		if (!t) {
			return -1;
		}
		t->numb = i;
		cdk_list_init_node(&t->node);

		cdk_list_insert_tail(&Tlist, &t->node);
	}
	//遍历链表
	for (list_node_t* x = cdk_list_head(&Tlist); x != cdk_list_sentinel(&Tlist); x = cdk_list_next(x)) {

		T* t = cdk_list_data(x, T, node);
		printf("list element: %d\n", t->numb);
	}
	//删除链表中某个元素
	for (list_node_t* x = cdk_list_head(&Tlist); x != cdk_list_sentinel(&Tlist); ) {

		T* t;
		t = cdk_list_data(x, T, node);
		x = cdk_list_next(x);

		if (t->numb == 5) {
			cdk_list_remove(&t->node);
			
			free(t);
			t = NULL;
		}
	}
	printf("---------------\n");
	
	//遍历链表
	for (list_node_t* x = cdk_list_head(&Tlist); x != cdk_list_sentinel(&Tlist); x = cdk_list_next(x)) {

		T* t = cdk_list_data(x, T, node);
		printf("list element: %d\n", t->numb);
	}
	return 0;
}

上面程序虽然Tlist是一个包含T类型的链表,但是真正干链表事的是每个T类型里的node成员。


可能刚开始看这种链表有点复杂,但是当了解这种链表的好处后,你就会爱不释手。


这种链表灵活,零拷贝等特性让我们没有理由不用。



如果你还在使用各种数据结构书上那种实现链表的方式?那么,是时候该换下口味了。


那些链表实现有下面几个问题:

  • 数据类型强关联
  • 不是零拷贝

好了,使用过list后,又由于 queue,stack是基于list阉割的,所以 *** 作和list基本一样。


怎么样?是不是很简单。


快点尝试下吧!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/569238.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存