The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

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




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру