aboutsummaryrefslogtreecommitdiffstats
path: root/man/man7/queue.7
diff options
context:
space:
mode:
authorAlejandro Colomar <alx.manpages@gmail.com>2022-09-05 23:03:38 +0200
committerAlejandro Colomar <alx.manpages@gmail.com>2022-09-05 23:03:47 +0200
commit70ac1c4785fc1e158ab2349a962dba2526bf4fbc (patch)
treebff270e2496dd284bccfc1271b43946f5d225224 /man/man7/queue.7
parent5423a6f86b2b920a5f3e8cf8d759b513050f2d33 (diff)
downloadman-pages-70ac1c4785fc1e158ab2349a962dba2526bf4fbc.tar.gz
src.mk, All pages: Move man* to man/
The root of the repository is becoming a bit overpopulated and unorganized, due to the recent addition of more mandirs, and more informative and configuration files too. Let's create a specific mandir <man/> that contains the mandirs <man[1-8]*>. Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>
Diffstat (limited to 'man/man7/queue.7')
-rw-r--r--man/man7/queue.7133
1 files changed, 133 insertions, 0 deletions
diff --git a/man/man7/queue.7 b/man/man7/queue.7
new file mode 100644
index 0000000000..87efb9e0d5
--- /dev/null
+++ b/man/man7/queue.7
@@ -0,0 +1,133 @@
+.\" Copyright (c) 1993
+.\" The Regents of the University of California. All rights reserved.
+.\" and Copyright (c) 2020 by Alejandro Colomar <colomar.6.4.3@gmail.com>
+.\"
+.\" SPDX-License-Identifier: BSD-3-Clause
+.\"
+.\"
+.TH QUEUE 7 2021-03-22 "Linux man-pages (unreleased)"
+.SH NAME
+queue \- implementations of linked lists and queues
+.SH DESCRIPTION
+The
+.I <sys/queue.h>
+header file provides a set of macros that
+define and operate on the following data structures:
+.IP * 3
+singly linked lists (SLIST)
+.IP *
+doubly linked lists (LIST)
+.IP *
+singly linked tail queues (STAILQ)
+.IP *
+doubly linked tail queues (TAILQ)
+.IP *
+doubly linked circular queues (CIRCLEQ)
+.PP
+All structures support the following functionality:
+.IP * 3
+Insertion of a new entry at the head of the list.
+.IP *
+Insertion of a new entry after any element in the list.
+.IP *
+O(1) removal of an entry from the head of the list.
+.IP *
+Forward traversal through the list.
+.\".IP *
+.\" Swapping the contents of two lists.
+.PP
+Code size and execution time
+depend on the complexity of the data structure being used,
+so programmers should take care to choose the appropriate one.
+.SS Singly linked lists (SLIST)
+Singly linked lists are the simplest
+and support only the above functionality.
+Singly linked lists are ideal for applications with
+large datasets and few or no removals,
+or for implementing a LIFO queue.
+Singly linked lists add the following functionality:
+.IP * 3
+O(n) removal of any entry in the list.
+.SS Singly linked tail queues (STAILQ)
+Singly linked tail queues add the following functionality:
+.IP * 3
+Entries can be added at the end of a list.
+.IP *
+O(n) removal of any entry in the list.
+.IP *
+They may be concatenated.
+.PP
+However:
+.IP * 3
+All list insertions must specify the head of the list.
+.IP *
+Each head entry requires two pointers rather than one.
+.PP
+Singly linked tail queues are ideal for applications with
+large datasets and few or no removals,
+or for implementing a FIFO queue.
+.SS Doubly linked data structures
+All doubly linked types of data structures (lists and tail queues)
+additionally allow:
+.IP * 3
+Insertion of a new entry before any element in the list.
+.IP *
+O(1) removal of any entry in the list.
+.PP
+However:
+.IP * 3
+Each element requires two pointers rather than one.
+.SS Doubly linked lists (LIST)
+Linked lists are the simplest of the doubly linked data structures.
+They add the following functionality over the above:
+.IP * 3
+They may be traversed backwards.
+.PP
+However:
+.IP * 3
+To traverse backwards, an entry to begin the traversal and the list in
+which it is contained must be specified.
+.SS Doubly linked tail queues (TAILQ)
+Tail queues add the following functionality:
+.IP * 3
+Entries can be added at the end of a list.
+.IP *
+They may be traversed backwards, from tail to head.
+.IP *
+They may be concatenated.
+.PP
+However:
+.IP * 3
+All list insertions and removals must specify the head of the list.
+.IP *
+Each head entry requires two pointers rather than one.
+.SS Doubly linked circular queues (CIRCLEQ)
+Circular queues add the following functionality over the above:
+.IP * 3
+The first and last entries are connected.
+.PP
+However:
+.IP * 3
+The termination condition for traversal is more complex.
+.SH STANDARDS
+Not in POSIX.1, POSIX.1-2001, or POSIX.1-2008.
+Present on the BSDs.
+.I <sys/queue.h>
+macros first appeared in 4.4BSD.
+.SH NOTES
+Some BSDs provide SIMPLEQ instead of STAILQ.
+They are identical, but for historical reasons
+they were named differently on different BSDs.
+STAILQ originated on FreeBSD, and SIMPLEQ originated on NetBSD.
+For compatibility reasons, some systems provide both sets of macros.
+Glibc provides both STAILQ and SIMPLEQ,
+which are identical except for a missing SIMPLEQ equivalent to
+.BR STAILQ_CONCAT ().
+.SH SEE ALSO
+.BR circleq (3),
+.BR insque (3),
+.BR list (3),
+.BR slist (3),
+.BR stailq (3),
+.BR tailq (3)
+.\" .BR tree (3)