insque(), remque()

Вставить/удалить элемент в двусвязную очередь

Прототип:

#include <search.h>
void insque( void *elem, void *pred );
void remque( void *elem );

Аргументы:

elem
Указатель на элемент, который подлежит вставке/удалению.
pred
Указатель на предыдущий элемент или NULL если необходимо инициализировать первый элемент списка.

Библиотека:

libc

Описание:

Функции insque() и remque() управляют очередями, построенными на двусвязных списках. Очередь может быть либо кольцевой либо линейной. Функции ожидают, что их аргументы будут указывать на структуру, первый и второй элементы которой являются указателями на следующий и предыдущий элемент, соответственно. Функция insque() позволяет передать NULL в качестве параметр pred для инициализации первого (головного) элемента линейного списка.

Примеры:

Примеры используют следующую структуру:

struct queue {
struct queue *next;
struct queue *prev;
char *data;
};

Создание линейного списка:

#include <search.h>
...
struct queue element1;
struct queue element2;
char *data1 = "DATA1";
char *data2 = "DATA2";
...
element1.data = data1;
element2.data = data2;
insque( &element1, NULL );
insque( &element2, &element1 );

Создание кольцевого списка:

#include <search.h>
...
struct queue element1;
struct queue element2;
char *data1 = "DATA1";
char *data2 = "DATA2";
...
element1.data = data1;
element2.data = data2;
element1.next = &element1;
element1.prev = &element1;
insque( &element2, &element1 );

Удаление элемента списка:

#include <search.h>
...
struct queue element1;
...
remque( &element1 );

Классификация:

POSIX 1003.1 X/Open Systems Interfaces Extension

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Да
Обработчик сигналов
Да
В потоке
Да




Предыдущий раздел: Описание API системной библиотеки