摘要:在中有这样一个头文件也有,它定义了一系列的宏操作,实现了双向链表,双端队列和循环链表。
在FreeBSD中有queue.h这样一个头文件(Linux也有),它定义了一系列的宏操作,实现了双向链表,双端队列和循环链表。
下面给出一些链表常用操作的例子:
#include#include #include struct element{ int num; /*LIST_ENTRY 创建了一个匿名结构体,这个结构体有两个成员, 分别为struct element* le_next; struct element** le_prev; 即,elements的类型就是这个匿名的结构体, 使得element成为双向链表中的节点 */ LIST_ENTRY(element) elements; }; int main(void){ /*LIST_HEAD 会自动构建一个名为listh的结构体, 里面含有一个element指针 *lh_first 这里的name一般没有什么用处,但是尽量注意有多个链表时,name不要相同造成冲突。 */ LIST_HEAD(listh,element) head; struct element *n1,*np; //链表使用前,需要初始化 LIST_INIT(&head); n1 = (struct element*)malloc(sizeof(struct element)); n1->num = 1; //各种插入方式 //插入到链表前端 /* 对于LIST_INSERT_HEAD为何需要用指针域作为参数, 因为指针域的名字是用户自己定义的,函数内部并不知道, 所以需要作为参数传入 */ LIST_INSERT_HEAD(&head,n1,elements); n1 = (struct element*)malloc(sizeof(struct element)); n1->num = 2; //插入到某个节点之后,这里是插入到第一个节点之后 LIST_INSERT_AFTER(LIST_FIRST(&head),n1,elements); n1 = (struct element*)malloc(sizeof(struct element)); n1->num=3; //插入到某个节点之前 LIST_INSERT_BEFORE(LIST_FIRST(&head),n1,elements); //遍历链表 //方法一 for(np=LIST_FIRST(&head);np!=NULL;np=LIST_NEXT(np,elements)){ printf("%d ",np->num); } //方法二(推荐) LIST_FOREACH(np,&head,elements){ printf("%d ",np->num); } //方法三(最原始) for(np=(head).lh_first;np!=NULL;np=np->elements.le_next){ printf("%d ",np->num); } //删除,释放链表 while(LIST_FIRST(&head)){ struct element* tmp = LIST_FIRST(&head); LIST_REMOVE(tmp,elements); free(tmp); } return 0; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/7582.html
摘要:源文件路径版本主要作用分析是提供的双向链表。同时,由于这种链表没有节点成员变量,所以需要作为带有节点变量的结构体的成员变量存在,这种情况下,称这种链表为寄宿链表,链表所在结构体称为宿主。和常规的双向链表操作基本相同。 源文件路径 版本:1.8.0 srccoreNgx_queue.h srccoreNgx_queue.c 主要作用分析 ngx_queue_t是Nginx提供的...
摘要:源文件路径版本主要作用分析是提供的双向链表。同时,由于这种链表没有节点成员变量,所以需要作为带有节点变量的结构体的成员变量存在,这种情况下,称这种链表为寄宿链表,链表所在结构体称为宿主。和常规的双向链表操作基本相同。 源文件路径 版本:1.8.0 srccoreNgx_queue.h srccoreNgx_queue.c 主要作用分析 ngx_queue_t是Nginx提供的...
摘要:源文件路径版本主要作用分析是提供的双向链表。同时,由于这种链表没有节点成员变量,所以需要作为带有节点变量的结构体的成员变量存在,这种情况下,称这种链表为寄宿链表,链表所在结构体称为宿主。和常规的双向链表操作基本相同。 源文件路径 版本:1.8.0 srccoreNgx_queue.h srccoreNgx_queue.c 主要作用分析 ngx_queue_t是Nginx提供的...
摘要:同时让当前结点的指针指向,从而实现从链表尾部开始的局部反转当递归函数全部出栈后,链表反转完成。这个链表的倒数第个节点是值为的节点。新链表是通过拼接给定的两个链表的所有节点组成的。 目录 1.反转链表 K个一组翻转链表 链表的中间节点: 链表倒数第k个节点: 删除链表倒数第k个节...
摘要:需求实现一个函数对链表进行升序排列插入排序。关于插入排序插入排序的介绍可以看,大体逻辑为建立一个新的空链表。遍历完成,返回新链表。代码如下总结因为有上个的函数的帮助,这个插入排序实现起来非常简单。 TL;DR 2016 年末最后一篇,对链表进行插入排序。系列目录见 前言和目录 。 需求 实现一个 insertSort() 函数对链表进行升序排列(插入排序)。实现过程中可以使用 上一个 ...
阅读 917·2021-11-24 09:38
阅读 3095·2021-11-19 09:56
阅读 2780·2021-11-18 10:02
阅读 613·2019-08-29 12:50
阅读 2474·2019-08-28 18:30
阅读 755·2019-08-28 18:10
阅读 3465·2019-08-26 11:36
阅读 2549·2019-08-23 18:23