UP | HOME

Linux内嵌链表(sys/queue.h)

Table of Contents

简介

头文件 queue.h 为 C语言中的链表提供了更加标准规范的编程接口。如今的版本多为伯克利加州大学1994年8月的8.5版本。

queue.h 在 Linux 系统中的路径是 /usr/include/sys/queue.h

queue 分为 SLISTLISTSTAILQTAILQCIRCLEQ 不同的链表有着不同的功能支持。 queue 的所有源码都是宏定义,因此完全包含于 queue.h 当中,无需编译为库文件。

每种结构都支持基本的操作:

  • 在链表头插入节点
  • 在任意的节点后插入节点
  • 移除链表头后的节点
  • 前向迭代遍历链表

区别

功能支持 SLIST LIST STAILQ TAILQ CIRCLEQ
EMPTY + + + + +
FIRST + + + + +
NEXT + + + + +
PREV       + +
LAST       + +
FOREACH + + + + +
FOREACH_REVERSE       + +
INSERT_HEAD + + + + +
INSERT_BEFORE   +   + +
INSERT_AFTER + + + + +
INSERT_TAIL     + + +
CONCAT     + +  
REMOVE_HEAD +   +    
REMOVE + + + + +
LOOP_NEXT         +
LOOP_PREV         +

SLIST

SLISTSingly-linked List 的缩写,意为单向无尾链表。

SLIST 是最简单的结构,它适合数据量非常大而几乎不需要删除数据的场合,又或者当做堆栈使用。

STAILQ

STAILQSingly-linked Tail queue 的缩写,意为单向有尾链表。有尾链表可作队列使用。

有尾链表虽然为一些尾部操作提供了便捷的操作,但是可执行文件比无尾链表增加了约15%的大小,且牺牲了约20%的执行速度。

LIST

LIST 是双向无尾链表。

双向链表有前向的指针,因此可以执行一些前向操作,而且无需遍历链表便可以删除一些节点。

TAILQ

TAILQTail queue 的缩写,意为双向有尾链表。有尾链表可作队列使用。

双向有尾链表兼具了双向链表和有尾链表的特点。

CIRCLEQ

CIRCLEQCircular queue 的缩写,意为循环链表。

参考

Author: JosephTseng

Lastmod: <2023-06-05 Mon>

License: CC BY-NC-ND 4.0

Last updated: 2023-06-05 Mon 22:23
Power by Emacs 28.2 (Org mode 9.6)
© 2017 – 2023 by JosephTseng