Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К2_Допматериалы_15апр.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.99 Mб
Скачать

Линейные списки

  • Линейный список - множество, состоящее из n>=0 элементов (узлов), структура которого ограничивается их одномерным (линейным) относительным положением, определяемым свойствами:

  • если n>0, Node1 - первый узел;

  • если 1<i<n, Nodei, i-му узлу предшествует Nodei-1, следует Nodei+1;

  • Noden - последний узел списка;

  • n=0 - список пуст.

Для представления линейного списка можно использовать массив (в непрерывной памяти) или ссылочную структуру, называемую связным списком (в связанной памяти).

Формы представления линейных списков в оперативной памяти

  • В ПОСЛЕДОВАТЕЛЬНОЙ ПАМЯТИ (В ВИДЕ МАССИВА):

рис.1. Список в последовательной памяти

  • ВАРИАНТ ОПИСАНИЯ СТРУКТУРЫ

Const

SIZE=10;

Var

List:array[1..SIZE] of Real;

Top: 0..SIZE;

  1. для размещения списка выделяется сплошной участок памяти; его размер известен заранее и остается неизменным;

  2. узлы списка располагаются в последовательных участках памяти, один узел следует сразу за другим;

  3. для обозначения текущей длины списка требуется либо дополнительная переменная, либо специальное значение в последней или в следующей за ней ячейке памяти.

  • В СВЯЗАННОЙ ПАМЯТИ (В ВИДЕ СВЯЗНОГО СПИСКА):

рис.2. Список в связанной памяти

Type

List=^Node;

Node=record

info:Real; // поле данных

next:List; // поле-ссылка

end;

VAR

HEAD:List; // адрес первого узла

  1. список – это набор записей (узлов), каждая из которых имеет, по крайней мере, одно поле данных и ссылку на следующий элемент (узел);

  2. память под узлы списка выделяется при необходимости в теле программы;

  3. используется дополнительная переменная, задающая адрес первого узла; другие элементы списка могут быть найдены с ее помощью при перемещении по ссылкам.

  • СРАВНЕНИЕ ФОРМ ПРЕДСТАВЛЕНИЯ (ЗАПОЛНИТЕ ПУСТЫЕ МЕСТА - РИСУНКИ ИЛИ КОД)

  1. Связный список (-): дополнительное пространство для размещения связей.

  1. Массив (-): состояние переполнения возникает чаще, чем в связных списках.

  1. Доступ к k-му элементу:

    Массив:

    Связный список:

  2. Вставка k-го узла:

    Массив:

    Связный список:

  3. Удаление k-го узла:

    Массив:

    Связный список:

  4. Связный список (+): проще организовать объединение/разбиение двух списков.

  1. Связный список (+): неявный выигрыш за счет частичного перекрытия совместно используемых областей памяти.

  1. Связный список (+): позволяет организовать более сложные структуры, чем линейные списки.

  1. Связный список (-): Зависит от типа компьютеров. Если элементы списка принадлежат разным страницам ОЗУ, то доступа к ним может выполняться существенно дольше.