Список
Версия от 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