23.2.4. Списки
23.2.4. Списки
Библиотека Glib содержит средства для работы с одно- и двусвязными списками. Особенность двусвязного списка заключается в том, что по нему можно перемещаться в обоих направлениях — назад и вперед. В файле gslist.h (Glib Single List) описаны средства для работы с односвязными списками, а в файле glist.h — для работы с двусвязным списком.
Вот структуры односвязного и двусвязного списков:
// односвязный список
typedef struct _GSList GSList;
struct _GSList {
gpointer data;
GSList *next; // указатель на следующий элемент списка
};
// двусвязный список
typedef struct _GList GList;
struct _GList {
gpointer data;
GList *next; // указатель на следующий элемент списка
GList *prev; // указатель на предыдущий элемент списка
};
Поле data предназначено для хранения данных списка, причем они могут быть любого типа, ведь gpointer — это тип void*.
Работать со списками очень просто. Для начала нужно объявить список:
GList *list = NULL;
GSList *slist = NULL;
Затем добавить элементы в список. Это можно сделать с помощью двух функций — g_list_append() или g_slist_prepend() — в зависимости от используемого типа списка:
gchar *el = g_strdup("это первый элемент");
list = g_list_append(list, el);
Функции g_list_append() и g_slist_append() добавляют элемент в конец списка. Если вы хотите добавить элемент в начало списка, нужно использовать функции:
g_list_prepend(GList *list, gpointer data);
g_slist_prepend{GSList *list, gpointer data);
Чтобы вставить новый элемент в определенную позицию, нужно использовать функции:
GList *g_list_insert(GList *list, gpointer data, gint position);
GSList *g_slist_insert(GSList *list, gpointer data, gint position);
Здесь position — это номер элемента, перед которым нужно вставить новый элемент. Если position=0, то элемент будет добавлен в начало списка, то есть перед бывшим первым элементом.
Для удаления элемента используются функции:
GList *g_list_remove(GList *list, gpointer data);
GSList *g_slist_remove(GSList *list, gpointer data);
Для передвижения по списку используются функции:
g_list_next(), g_slist_next() — на "шаг" вперед
g_list_prev() — назад
Вот небольшой пример работы со списком — вывод на консоль всех его элементов:
// double_list должен быть определен и содержать элементы
GList *list = double_list;
while (list!=NULL) {
printf("%s ",list->data);
list = g_list_next(list);
}
По окончании работы со списком не забудьте освободить память:
void g_list_free(GList *list);
void g_slist_free(GSList *slist);
Для сортировки списка используется функция:
GSList *g_slist_sort(GSList * slist, GCompareFunc f);
Первый параметр — это список, который нужно отсортировать. Второй — это функция сравнения двух элементов. Вот ее прототип:
typedef gint (*GCompareFunc) (gconstpointer a, gconstpointer b); Данную функцию вы должны написать самостоятельно. Она должна принимать два параметра и возвращать целое значение:
? если a<b, то -1 (точнее, любое число меньше 0);
? если a==b, то 0;
? если a>b, то 1 (любое число больше 0).
Библиотека Glib также содержит средства для работы с деревьями — как бинарными, так и произвольными, но мы эти средства рассматривать не будем.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Списки
Списки Списки дают возможность расположить большое количество пунктов компактно. При создании списков вы сами можете определить количество видимых элементов. Можно настроить возможность выбора одного или нескольких пунктов. По функциям списки напоминают
Списки
Списки Рассмотрим все возможности задания спискам различного визуального форматирования.Кстати, если вы с помощью display: marker укажете маркер вместе с элементом списка, созданным с помощью свойств списка, то маркер просто-напросто заменит стандартный элемент списка.
Списки
Списки Списки используются для того, чтобы представить читателю перечень каких-либо позиций, пронумерованных или непронумерованных, — пунктов списка. Список с пронумерованными пунктами так и называется — нумерованным, а с непронумерованными — маркированным. В
Списки
Списки Списки используются для того, чтобы представить читателю перечень каких-либо позиций, пронумерованных или непронумерованных, — пунктов списка. Список с пронумерованными пунктами так и называется — нумерованным, а с непронумерованными — маркированным. В
15.5.6. Списки ACL
15.5.6. Списки ACL ACL (Access Control Lists) — списки контроля доступа. Довольно часто возникает потребность группировки однотипных параметров в единое целое для их последующей обработки. Для эффективного решения этой задачи используются списки контроля доступом (ACL). Например: acl SSL_ports
18.6. Списки ACL
18.6. Списки ACL ACL (Access Control Lists) — списки контроля доступа. Довольно часто возникает необходимость группировки однотипных параметров в единое целое для их последующей обработки. Для эффективного решения этой задачи используются списки ACL. Например:acl SSL_ports port 443 563Эта запись
23.2.4. Списки
23.2.4. Списки Библиотека Glib содержит средства для работы с одно- и двусвязными списками. Особенность двусвязного списка заключается в том, что по нему можно перемещаться в обоих направлениях — назад и вперед. В файле gslist.h (Glib Single List) описаны средства для работы с
Списки
Списки Когда в тексте нужно что-то перечислить, это принято делать с помощью списков. Пока читаете книгу, обратили внимание, сколько в ней есть списков? Я их создавала в Word с помощью специальных инструментов. Сейчас расскажу вам о них.Остаемся в группе Абзац на вкладке
Списки изображений
Списки изображений Если нужно несколько раз обращаться к одной и той же группе команд,эти команды можно объединить в так называемый список изображений (display list) и вызывать его при необходимости. Для того, чтобы создать новый список изображений надо поместить все команды,
Маркированные списки
Маркированные списки При создании маркированных списков можно использовать самые разные типы маркеров. Список кнопки Маркеры (см. рис. 4.30) и одноименная команда контекстного меню (см. рис. 4.32) позволяют выбрать один из семи наиболее применяемых маркеров. Кроме того, можно
Нумерованные списки
Нумерованные списки При создании нумерованных списков можно использовать самые разные типы нумерации. Список кнопки Нумерация (рис. 4.36) и одноименная команда контекстного меню (см. рис. 4.31) позволяют выбрать один из семи наиболее часто используемых типов нумерации. Кроме
19.5. Списки видимости
19.5. Списки видимости Иногда нужно, чтобы часть пользователей из вашего списка контактов «видела» вас, а остальные думали, что вас нет в сети. Это возможно осуществить в ICQ. Вам нужно лишь сформировать списки «видимости». Откройте окно Мои настройки (Главное, Настройки и
5.1.8. Списки
5.1.8. Списки Текстовый процессор Pages, как и MS Word, предлагает создавать списки следующих видов:? Маркированные. В качестве маркера могут быть использованы символы, готовые картинки, входящие в библиотеку, картинки пользователя;? Нумерованные. Перечень вариантов для
Списки
Списки Чтобы акцентировать внимание на отдельных абзацах, их можно пронумеровать, создав так называемый нумерованный список. Другой способ выделения абзацев состоит в отметке их маркерами (маркированный список). Например, последовательность выполнения практических
Косвенные списки САС
Косвенные списки САС В версии 2000 года стандарта X.509 [78] появилась концепция косвенных дельта-списков. Подобно дельта-спискам, косвенные списки содержат сведения об изменениях ранее опубликованной информации об аннулировании сертификатов. Однако косвенные дельта-списки
Колисниченко Денис Николаевич
Просмотр ограничен
Смотрите доступные для ознакомления главы 👉