Закрепление материала: Линейные списки

Модуль "Линейные списки" • урок 8 из 9 • ~8 минут

Суть урока. В этом модуле мы разобрали устройство линейных списков - структур, допускающих произвольную вставку и удаление. Мы посмотрели на них с разных сторон: от абстрактной логики головы и хвоста до суровых реализаций на указателях и индексных векторах в C. Пришло время собрать все концепции воедино и проверить свои знания перед переходом к графам и деревьям.
Индексный вектор и динамические узлы: массив дает сплошную память ценой ручного учета дырок, а куча дает вставку за O(1) ценой вызовов malloc и free
Что выбрать: сплошная память с учетом дырок или узлы по одному из кучи

Краткое резюме модуля

За прошедшие уроки мы изучили несколько ключевых подходов к хранению и обработке списков:

Ключевые идеи

Коротко: главное

  • Списки решают проблему дорогой вставки в середину коллекции.
  • Поиск элемента в списке всегда занимает время O(N), так как прямого доступа по индексу нет.
  • Сама операция вставки или удаления (при известной позиции) выполняется за O(1).
  • Индексные векторы заменяют физические указатели на целые числа.
  • Разреженные матрицы выгодно хранить в виде триплетов, собирая их в ортосписки.

Проверьте себя

Вопрос 1

В чем заключается главная цель использования итераторов при работе со списками на языке C?

Вопрос 2

Если логически отделить голову от хвоста в списке [15, 42], чем будет являться хвост?

Вопрос 3

Что происходит с остальными данными в массиве при удалении элемента из индексного вектора?

Как вам урок? Спасибо за отзыв!