На Горох
Информатика, 10 класс, 11 класс

Другие виды структур

"Информатика (базовый уровень) (в 2 частях)", Под ред. Макаровой Н.В.

Объяснение темы

Кратко о теме

Структура данных определяет, как элементы организованы, связаны и обрабатываются в программе. Линейный список выстраивает элементы в последовательность, стек работает по правилу «последним пришёл — первым вышел», очередь — «первым пришёл — первым вышел», а дерево создаёт иерархию уровней. Выбор структуры зависит от того, какие операции нужны чаще: добавление, удаление, поиск или обработка элементов.

Объяснение темы

Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.

Определения и обозначения

Линейный список — последовательность элементов, в которой у каждого внутреннего элемента есть предыдущий и следующий. В отличие от массива, элементы списка могут быть связаны не соседним расположением в памяти, а ссылками или указателями. Такая организация удобна, когда элементы часто вставляют или удаляют, потому что можно изменить связи между соседями.

Стек — структура, где добавление и удаление выполняются с одного конца, называемого вершиной. Она работает по правилу LIFO: «последним пришёл — первым вышел». Стек нужен там, где сначала требуется обработать самое позднее действие, например при отмене команд или разборе вложенных вызовов.

Очередь — структура, в которой элементы добавляются с одного конца, а удаляются с другого. Её правило FIFO означает «первым пришёл — первым вышел». Поэтому очередь подходит для последовательного обслуживания заявок, сообщений или покупателей.

Дерево — иерархическая структура узлов со связями «родитель — потомок», начинающаяся с корня. От корня отходят ветви, а узлы, у которых нет потомков, называют листьями. Дерево позволяет показывать уровни и отношения подчинения, например папки и файлы.

Как это устроено

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

В линейном списке элементы образуют цепочку связей. При вставке нового узла между вторым и третьим достаточно направить связь от второго к новому, а от нового — к третьему, не сдвигая все последующие элементы. При удалении узла соседние элементы соединяют напрямую, поэтому порядок сохраняется, но связи изменяются.

Стек подходит для вложенных действий, потому что последнее начатое действие обычно должно завершиться раньше предыдущего. Например, при вызове одной процедуры из другой сначала завершается внутренняя процедура, а затем внешняя. По той же причине стек удобен для отмены операций: последнюю команду можно отменить первой.

Очередь упорядочивает обслуживание так, чтобы более ранняя заявка не была вытеснена поздней. Новые элементы помещают в конец, а обработку начинают с начала, поэтому порядок поступления сохраняется. В стеке, наоборот, новая заявка оказывается первой на обработку, если она лежит на вершине.

Дерево организует данные по уровням, потому что каждый узел может иметь родителя и несколько потомков. Корень находится на верхнем уровне, от него отходят ветви, а листья располагаются на концах ветвей. Потомки узла — это все узлы, расположенные ниже него и связанные с ним через иерархию.

Сравнение структур данных

СвойствоЛинейный списокСтекОчередьДерево
Как расположены элементыВ последовательности, связанной отношениями соседстваВ последовательности с доступом через вершинуВ последовательности с началом и концомПо уровням и ветвям
Как добавляют элементыВ нужное место спискаНа вершинуВ конецК выбранному узлу как потомка
Как удаляют элементыИз нужного местаС вершиныИз началаВыбранный узел или ветвь
Порядок доступа к элементамПо связям последовательностиLIFOFIFOПо уровням или ветвям
Пример примененияСписок делОтмена действийОчередь заявокФайловая система

Таблицу удобно читать по строкам, если нужно сравнить одну характеристику разных структур. По столбцам можно быстро определить, как устроена конкретная структура и где её применять. Особое внимание стоит обратить на порядок доступа: именно он различает стек и очередь.

Разбор задач

Вставка в линейный список

Дан список из трёх элементов: A, B, C. Требуется вставить элемент X между вторым и третьим элементами. Нужно проследить не только порядок букв, но и изменение связей между соседними узлами.

  1. Запишем исходную последовательность: A → B → C.
  2. Определим место вставки: после B и перед C.
  3. Направим связь от B к X, а от X — к C.
  4. Получим новую последовательность: A → B → X → C.

Ответ: список станет A, B, X, C. Элемент C не исчезает и не перемещается физически обязательно: меняется порядок связей, по которым список просматривают.

Операции со стеком

В стек последовательно положили числа 4, 7 и 2. Затем дважды извлекли верхний элемент. Поскольку стек работает по принципу LIFO, сначала нужно проверить последний добавленный элемент, а не самое первое число.

  1. После добавления 4 стек содержит: 4.
  2. После добавления 7 сверху находится 7: 4, 7.
  3. После добавления 2 вершиной становится 2: 4, 7, 2.
  4. Первое извлечение удаляет 2, второе — 7.

Ответ: числа извлекаются в порядке 2, 7, а в стеке остаётся число 4. Каждая операция удаления берёт элемент с той же стороны, с которой выполнялось добавление.

Операции с очередью

В очередь поступили заявки A, B и C, затем одну заявку обработали, после чего поступила заявка D. В очереди добавление происходит в конец, а обработка — из начала. Поэтому нужно выполнять действия строго в порядке их поступления.

  1. После поступления заявок очередь имеет вид: A, B, C.
  2. Обрабатываем первую заявку A, остаются B, C.
  3. Добавляем D в конец очереди: B, C, D.
  4. Если продолжить обработку, заявки пойдут в порядке B, C, D.

Ответ: первой обработана A, а состояние очереди после добавления D — B, C, D. Заявка D не может обойти B и C, потому что очередь соблюдает принцип FIFO.

Типичные ошибки

Ошибка: считать стек и очередь одинаковыми структурами. Так происходит, если смотреть только на наличие добавления и удаления, не учитывая их стороны. Проверьте себя: в стеке обе операции выполняются с одного конца, а в очереди — с разных.

Ошибка: путать LIFO и FIFO. Названия похожи, поэтому полезно раскрывать сокращение и проверять его на трёх элементах. Если первым извлекается последний добавленный элемент, это LIFO; если первый — FIFO.

Ошибка: считать, что любой узел дерева имеет только одного потомка. Такое представление возникает из-за сходства дерева с цепочкой, но у узла может быть несколько ветвей. Проверьте схему: посчитайте, сколько связей выходит из одного родительского узла.

Ошибка: называть дерево линейной структурой. В дереве элементы не образуют одну последовательность, а располагаются по уровням. Если от одного узла можно перейти к нескольким потомкам, перед вами иерархия, а не линейная цепочка.

Связь с другими темами

Для понимания темы нужны представления о данных, элементах данных и последовательностях, а также умение выполнять алгоритм по шагам. Эти знания помогают точно отслеживать добавление, удаление и изменение связей. Структуры данных применяются при выборе способа хранения информации в программах, в файловых системах и при работе с иерархическими данными.

Что запомнить

  • Структуру данных выбирают в соответствии с нужными операциями.
  • В стеке последним извлекают элемент, добавленный последним.
  • В очереди первым извлекают элемент, добавленный первым.
  • Линейный список организует элементы в последовательность.
  • Дерево представляет данные в виде иерархии.
  • Один и тот же набор данных можно организовать разными способами.

Частые вопросы по теме

Чем список отличается от массива?

Массив обычно хранит элементы в соседних ячейках памяти и имеет фиксированный или заранее заданный размер. В линейном списке элементы связаны последовательностью, поэтому вставка и удаление могут выполняться изменением связей между узлами.

Почему стек называют структурой LIFO?

LIFO расшифровывается как «последним пришёл — первым вышел». Новый элемент кладут на вершину стека, и извлекают также с вершины, поэтому последняя добавленная запись обрабатывается первой.

Почему очередь называют структурой FIFO?

FIFO означает «первым пришёл — первым вышел». Элементы добавляются в конец очереди, а извлекаются из начала, поэтому порядок обслуживания совпадает с порядком поступления.

Можно ли добавлять и удалять элементы очереди с одного конца?

В обычной очереди эти операции выполняются с разных концов: добавление — с конца, удаление — с начала. Если обе операции разрешены с одного конца, такая структура уже работает по принципу стека.

Чем дерево отличается от линейной последовательности?

Линейная последовательность образует одну цепочку элементов, где у каждого внутреннего элемента есть один предшественник и один следующий. В дереве связи образуют уровни: у узла может быть несколько потомков, а все ветви начинаются от корня.

Спросить по теме параграфа

Другие виды структур

Учебник

Оглавление →
Предмет
Информатика
Класс
10 класс, 11 класс
Учебник
"Информатика (базовый уровень) (в 2 частях)", Под ред. Макаровой Н.В.