Список
Версия от 17:19, 6 февраля 2012; 192.168.0.2 (обсуждение)
Связный список - структура данных, состоящая из элементов, содержащих помимо собственных данных ссылки на следующий и/или предыдущий элемент списка. С помощью списков можно реализовать такие структуры данных как стек и очередь.
Односвязный список
Двусвязный список
Также хранится указатель на предыдущий элемент списка, благодаря чему становится проще удалять и переставлять элементы.
XOR-связный список
В некоторых случаях использование двусвязного списка в явном виде является нецелесообразным. В целях экономии памяти можно хранить только результат выполнения операции Xor над адресами предыдущего и следующего элементов списка. Таким образом, зная адрес предыдущего элемента, мы можем вычислить адрес следующего элемента.
Циклический список
Операции на списке
Рассмотрим базовые операции на примере односвязного списка.
Вставка
insert(new_head)// вставка в голову списка
{
new_head->next = head;
head = new_head;
}
insertAfter(this_element, that_element)// вставка после this_element
{
that_element->next = this_element->next;
this_element->next = that_element;
}
Поиск
Search()//ищем элемент, в случае неудачи возвращаем NULL
{
node = head;
while ((node != NULL) && (we_are_looking_not_for(node)))
node = node->next;
return node;
}
Удаление
removeHead()//удаление головы
{
if (head != NULL)
{
tmp = head;
head = head->next;
delete tmp;
}
}
removeAfter(this_element)
{
if ((this_element != NULL)&&(this_element->next != NULL))
{
tmp = this_element->next;
this_element->next = this_element->next->next;
delete tmp;
}
}
См.также
Ссылки
Литература
- Т. Кормен, Ч. Лейзерсон, Р. Ривест: Алгоритмы: построение и анализ глава 11.2
- Д. Кнут: Искусство программирования том 1 глава 2.2