Double-ended Queues

Double-ended Queues — Двусторонняя очередь структур данных.

Краткое описание

#include <glib.h> GQueue; GQueue* g_queue_new (void); void g_queue_free (GQueue *queue); gboolean g_queue_is_empty (GQueue *queue); guint g_queue_get_length (GQueue *queue); void g_queue_reverse (GQueue *queue); GQueue* g_queue_copy (GQueue *queue); void g_queue_foreach (GQueue *queue, GFunc func, gpointer user_data); GList* g_queue_find (GQueue *queue, gconstpointer data); GList* g_queue_find_custom (GQueue *queue, gconstpointer data, GCompareFunc func); void g_queue_sort (GQueue *queue, GCompareDataFunc compare_func, gpointer user_data); void g_queue_push_head (GQueue *queue, gpointer data); void g_queue_push_tail (GQueue *queue, gpointer data); void g_queue_push_nth (GQueue *queue, gpointer data, gint n); gpointer g_queue_pop_head (GQueue *queue); gpointer g_queue_pop_tail (GQueue *queue); gpointer g_queue_pop_nth (GQueue *queue, guint n); gpointer g_queue_peek_head (GQueue *queue); gpointer g_queue_peek_tail (GQueue *queue); gpointer g_queue_peek_nth (GQueue *queue, guint n); gint g_queue_index (GQueue *queue, gconstpointer data); void g_queue_remove (GQueue *queue, gconstpointer data); void g_queue_remove_all (GQueue *queue, gconstpointer data); void g_queue_insert_before (GQueue *queue, GList *sibling, gpointer data); void g_queue_insert_after (GQueue *queue, GList *sibling, gpointer data); void g_queue_insert_sorted (GQueue *queue, gpointer data, GCompareDataFunc func, gpointer user_data); void g_queue_push_head_link (GQueue *queue, GList *link_); void g_queue_push_tail_link (GQueue *queue, GList *link_); void g_queue_push_nth_link (GQueue *queue, gint n, GList *link_); GList* g_queue_pop_head_link (GQueue *queue); GList* g_queue_pop_tail_link (GQueue *queue); GList* g_queue_pop_nth_link (GQueue *queue, guint n); GList* g_queue_peek_head_link (GQueue *queue); GList* g_queue_peek_tail_link (GQueue *queue); GList* g_queue_peek_nth_link (GQueue *queue, guint n); gint g_queue_link_index (GQueue *queue, GList *link_); void g_queue_unlink (GQueue *queue, GList *link_); void g_queue_delete_link (GQueue *queue, GList *link_);

Описание

Структура GQueue и связанные с ней функции обеспечивают стандартную очередь структур данных. Внутренне, GQueue использует для хранения элементов те же структуры что и GList.

Данные содержащиеся в каждом элементе могут быть либо целочисленными значениями, используя Type Conversion Macros, или просто указатели на любой тип данных.

Для создания новой GQueue, используйте g_queue_new().

Для добавления элементов, используйте g_queue_push_head(), g_queue_push_head_link(), g_queue_push_tail() and g_queue_push_tail_link().

Для удаления элементов, используйте g_queue_pop_head() и g_queue_pop_tail().

Для освобождения элементов очереди, используйте g_queue_free().

Детали

GQueue

typedef struct { GList *head; GList *tail; guint length; } GQueue;

Содержит общедоступные поля Queue.

GList *head; указатель на первый элемент в очереди.
GList *tail; указатель на последний элемент в очереди.
guint length; количество элементов в очереди.

g_queue_new ()

GQueue* g_queue_new (void);

Создаёт новую GQueue.

Возвращает : новая GQueue.

g_queue_free ()

void g_queue_free (GQueue *queue);

Освобождает память распределённую для GQueue.

queue : GQueue.

g_queue_is_empty ()

gboolean g_queue_is_empty (GQueue *queue);

Возвращает TRUE очередь пустая.

queue : GQueue.
Возвращает : TRUE если очередь пустая.

g_queue_get_length ()

guint g_queue_get_length (GQueue *queue);

Возвращает количество элементов в queue.

queue : GQueue
Возвращает : Количество элементов в queue.

Начиная с версии 2.4


g_queue_reverse ()

void g_queue_reverse (GQueue *queue);

Переворачивает направление элементов в queue.

queue : GQueue

Начиная с версии 2.4


g_queue_copy ()

GQueue* g_queue_copy (GQueue *queue);

Копирует queue. Помните что это поверхностная копия. Если очередь содержит указатели на данные, то указатели копируются, а фактические данные нет.

queue : GQueue
Возвращает : копия queue

Начиная с версии 2.4


g_queue_foreach ()

void g_queue_foreach (GQueue *queue, GFunc func, gpointer user_data);

Вызывает функцию func для каждого элемента в очереди помещая user_data в функцию.

queue : GQueue
func : функция вызываемая для каждого элемента данных
user_data : пользовательские данные помещаемые в func

Начиная с версии 2.4


g_queue_find ()

GList* g_queue_find (GQueue *queue, gconstpointer data);

Находит первую связь в queue которая содержит data.

queue : GQueue
data : данные для поиска
Возвращает : Первая связь в queue которая содержит data.

Начиная с версии 2.4


g_queue_find_custom ()

GList* g_queue_find_custom (GQueue *queue, gconstpointer data, GCompareFunc func);

Находит элемент в GQueue, используя полученную функцию для поиска желаемого элемента. Она передвигается через очередь, вызывая полученную функцию которая должна вернуть 0 когда желаемый элемент найден. Функция принимает два аргумента gconstpointer, элементы данных GQueue как первый аргумент и полученные пользовательские данные как второй аргумент.

queue : GQueue
data : пользовательские данные помещаемые в func
func : GCompareFunc вызываемая для каждого элемента. Она должна вернуть 0 когда желаемый элемент найден.
Возвращает : Найденный элемент, или NULL если не найден.

Начиная с версии 2.4


g_queue_sort ()

void g_queue_sort (GQueue *queue, GCompareDataFunc compare_func, gpointer user_data);

Сортирует queue используя compare_func.

queue : GQueue
compare_func : GCompareDataFunc используемая для сортировки queue. В эту функцию помещаются два элемента очереди и она должна вернуть 0 если они равны, отрицательное значение если первый располагается перед вторым, а положительное если второй располагается перед первым.
user_data : пользовательские данные помещаемые в compare_func

Начиная с версии 2.4


g_queue_push_head ()

void g_queue_push_head (GQueue *queue, gpointer data);

Добавляет новый элемент первым в очередь.

queue : GQueue.
data : данные для нового элемента.

g_queue_push_tail ()

void g_queue_push_tail (GQueue *queue, gpointer data);

Добавляет новый элемент в конец очереди.

queue : GQueue.
data : данные для нового элемента.

g_queue_push_nth ()

void g_queue_push_nth (GQueue *queue, gpointer data, gint n);

Вставляет новый элемент в queue в указанную позицию.

queue : GQueue
data : данные для нового элемента
n : позиция расположения нового элемента. Если n отрицательное или больше чем число элементов в queue, элемент добавляемый в конец очереди.

Начиная с версии 2.4


g_queue_pop_head ()

gpointer g_queue_pop_head (GQueue *queue);

Удаляет первый элемент в очереди.

queue : GQueue.
Возвращает : данные первого элемента в очереди, или NULL если очередь пустая.

g_queue_pop_tail ()

gpointer g_queue_pop_tail (GQueue *queue);

Удаляет последний элемент из очереди.

queue : GQueue.
Возвращает : данные последнего элемента в очереди, или NULL если очередь пустая.

g_queue_pop_nth ()

gpointer g_queue_pop_nth (GQueue *queue, guint n);

Удаляет n элемент в queue.

queue : GQueue
n : позиция элемента.
Возвращает : данные элемента, или NULL если n выходит за пределы queue.

Начиная с версии 2.4


g_queue_peek_head ()

gpointer g_queue_peek_head (GQueue *queue);

Возвращает первый элемент в queue.

queue : GQueue.
Возвращает : данные первого элемента в очереди, или NULL если очередь пустая.

g_queue_peek_tail ()

gpointer g_queue_peek_tail (GQueue *queue);

Возвращает последний элемент в очереди.

queue : GQueue.
Возвращает : данные последнего элемента в очереди, или NULL если очередь пустая.

g_queue_peek_nth ()

gpointer g_queue_peek_nth (GQueue *queue, guint n);

Возвращает n элемент в queue.

queue : GQueue
n : позиция элемента.
Возвращает : Данные для n элемента в queue, или NULL если n выходит за пределы queue.

Начиная с версии 2.4


g_queue_index ()

gint g_queue_index (GQueue *queue, gconstpointer data);

Возвращает позицию первого элемента в queue который содержит data.

queue : GQueue
data : данные для поиска.
Возвращает : Позиция первого элемента в queue который содержит data, или -1 если нет элемента в queue содержащего data.

Начиная с версии 2.4


g_queue_remove ()

void g_queue_remove (GQueue *queue, gconstpointer data);

Удаляет первый элемент в queue который содержит data.

queue : GQueue
data : удаляемые данные.

Начиная с версии 2.4


g_queue_remove_all ()

void g_queue_remove_all (GQueue *queue, gconstpointer data);

Удаляет все элементы в queue которые содержат data.

queue : GQueue
data : данные для удаления

Начиная с версии 2.4


g_queue_insert_before ()

void g_queue_insert_before (GQueue *queue, GList *sibling, gpointer data);

Вставляет data в queue перед sibling.

sibling должен быть частью queue.

queue : GQueue
sibling : GList узел, который должен быть частью queue
data : данные для вставки

Начиная с версии 2.4


g_queue_insert_after ()

void g_queue_insert_after (GQueue *queue, GList *sibling, gpointer data);

Вставляет data в queue после sibling

sibling должен быть частью queue

queue : GQueue
sibling : GList узел, который должен быть частью queue
data : вставляемые данные

Начиная с версии 2.4


g_queue_insert_sorted ()

void g_queue_insert_sorted (GQueue *queue, gpointer data, GCompareDataFunc func, gpointer user_data);

Вставляет data в queue используя func для определения новой позиции.

queue : GQueue
data : вставляемые данные
func : GCompareDataFunc используется для сравнения элементов в очереди. Она вызывается с двумя элементами, queue и user_data. Должна вернуть 0 если элементы равны, отрицательное значение если первый элемент располагается перед вторым, а положительное значение если второй элемент располагается перед первым.
user_data : пользовательские данные помещаемые в func.

Начиная с версии 2.4


g_queue_push_head_link ()

void g_queue_push_head_link (GQueue *queue, GList *link_);

Добавляет новый элемент первым в очередь.

queue : GQueue.
link_ : одиночный элемент GList, не список с множеством элементов.

g_queue_push_tail_link ()

void g_queue_push_tail_link (GQueue *queue, GList *link_);

Добавляет новый элемент в конец очереди.

queue : GQueue.
link_ : одиночный элемент GList, не список с множеством элементов.

g_queue_push_nth_link ()

void g_queue_push_nth_link (GQueue *queue, gint n, GList *link_);

Вставляет link в полученную позицию queue.

queue : GQueue
n : позиция для вставки узла. Если отрицательное или больше чем количество элементов в queue, узел добавляется в конец queue.
link_ : узел добавляемый в queue

Начиная с версии 2.4


g_queue_pop_head_link ()

GList* g_queue_pop_head_link (GQueue *queue);

Удаляет первый элемент в очереди.

queue : GQueue.
Возвращает : Первый GList элемент в очереди, или NULL если очередь пустая.

g_queue_pop_tail_link ()

GList* g_queue_pop_tail_link (GQueue *queue);

Удаляет последний элемент в очереди.

queue : GQueue.
Возвращает : Элемент GList в конце очереди, или NULL если очередь пустая.

g_queue_pop_nth_link ()

GList* g_queue_pop_nth_link (GQueue *queue, guint n);

Удаляет и возвращает узел в полученной позиции.

queue : GQueue
n : позиция узла
Возвращает : n-ный узел, или NULL если n выходит за пределы queue.

Начиная с версии 2.4


g_queue_peek_head_link ()

GList* g_queue_peek_head_link (GQueue *queue);

Возвращает первый узел в queue

queue : GQueue
Возвращает : первый узел в queue, или NULL если queue пустая

Начиная с версии 2.4


g_queue_peek_tail_link ()

GList* g_queue_peek_tail_link (GQueue *queue);

Возвращает последний узел queue.

queue : GQueue
Возвращает : последний узел в queue, или NULL если queue пустая

Начиная с версии 2.4


g_queue_peek_nth_link ()

GList* g_queue_peek_nth_link (GQueue *queue, guint n);

Возвращает узел из полученной позиции

queue : GQueue
n : позиция узла
Возвращает : узел из n-ной позиции, или NULL если n выходит за пределы очереди

Начиная с версии 2.4


g_queue_link_index ()

gint g_queue_link_index (GQueue *queue, GList *link_);

Возвращает позицию link_ в queue.

queue : Gqueue
link_ : элемент GList
Возвращает : позиция link_, или -1 если узел не часть queue

Начиная с версии 2.4


g_queue_unlink ()

void g_queue_unlink (GQueue *queue, GList *link_);

Сбрасывает link_ так чтобы он не был больше частью queue. Узел не освобождается.

link_ должен быть частью queue,

queue : GQueue
link_ : GList элемент который должен быть частью queue

Начиная с версии 2.4


g_queue_delete_link ()

void g_queue_delete_link (GQueue *queue, GList *link_);

Удаляет link_ из queue и освобождает его.

link_ должен быть частью queue.

queue : GQueue
link_ : GList элемент который должен быть частью queue

Начиная с версии 2.4