The OpenNET Project / Index page

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

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

GTK+ 2.0 Tutorial

<<< Previous

GLib

Next >>>


Списки двойной связи

Следующие функции используются для создания, управления и уничтожения стандартных списков двойной связи. Каждый элемент в списке содержит часть данных, вместе с указателями, которые связываются с предыдущими и следующими элементами в списке. Это позволяет легко передвигаться по списку в любом направлении.  Элемент данных имеет тип "gpointer", что означает, что данные могут быть указателем на ваши реальные данные или (через приведение) числовое значение (но не думайте, что int и gpointer имеют одинаковый размер!). Эти подпрограммы внутренне распределяют элементы списка в блоках, которые более эффективны чем распределение элементов индивидуально.

Нет функции чтобы определенно создать список.  Вместо этого просто создайте переменную типа GList* и установите его значение в NULL; NULL, как предполагается, является пустым списком.

Для добавления элементов в список используйте g_list_append(), g_list_prepend(), g_list_insert(), или g_list_insert_sorted().  Во всех случаях они принимают указатель на начало списка, и возвращают (возможно измененный) указатель на начало списка.  Таким образом, для всех операций, которые добавляют или удаляют элементы, убедитесь, что сохранили возвращенное значение!

GList *g_list_append( GList    *list,
                      gpointer  data );

Это добавляет новый элемент (со значением data) в конец списка.

GList *g_list_prepend( GList    *list,
                       gpointer  data );

Это добавляет новый элемент (со значением data) в начало списка.

GList *g_list_insert( GList    *list,
                      gpointer  data,
                      gint      position );

Это вставляет новый элемент (со значением data) в список в данной позиции. Если позиция - 0, то результат аналогичен g_list_prepend(); если позиция - меньше чем 0, то результат аналогичен g_list_append().

GList *g_list_remove( GList    *list,
                      gpointer  data );

Это удаляет из списка элемент со значением data; если элемент не существует, список не изменяется.

void g_list_free( GList *list );

Это освобождает всю память используемую GList.  Если элементы списка обращаются к динамически-распределенной памяти, то они должны быть сначала освобождены.

Есть много других функций GLib которые поддерживают списки двойной связи; для более подробной информации смотрите документацию glib.  Вот несколько из сигнатур некоторых полезных функций:

  
GList *g_list_remove_link( GList *list,
                           GList *link );
GList *g_list_reverse( GList *list );
GList *g_list_nth( GList *list,
                   gint   n );
                           
GList *g_list_find( GList    *list,
                    gpointer  data );
GList *g_list_last( GList *list );
GList *g_list_first( GList *list );
gint g_list_length( GList *list );
void g_list_foreach( GList    *list,
                     GFunc     func,
                     gpointer  user_data );

<<< Previous

Home

Next >>>

GLib

Up

Singly Linked Lists






Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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