Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЭ_У_Студентам / ГЭ-У2_Распечатки.doc
Скачиваний:
36
Добавлен:
05.06.2015
Размер:
2.59 Mб
Скачать
  • 15

  • ТЕМА. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ. ЛИНЕЙНЫЕ СПИСКИ ВОПРОСЫ 3,6, 2 (частично -стр.5)

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

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

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

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

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

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

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

  • ФОРМЫ ПРЕДСТАВЛЕНИЯ ЛИНЕЙНЫХ СПИСКОВ В ПАМЯТИ

  • В последовательной памяти(в виде массива):

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

Const

SIZE=10

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

Var

Top: 0..SIZE;

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

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

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

  • В связанной памяти (в виде связного списка):

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

Type

List=^Node;

Node=record

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

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

end;

VAR

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

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

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

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

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

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

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

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

    Массив:

    Заполните самостоятельно (рисунок и/или код)

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

    Заполните самостоятельно (рисунок и/или код)

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

    Массив:

    Заполните самостоятельно (рисунок и/или код)

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

    Заполните самостоятельно (рисунок и/или код)

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

    Массив:

    Заполните самостоятельно (рисунок и/или код)

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

    Заполните самостоятельно (рисунок и/или код)

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

Заполните самостоятельно (рисунок и/или код)

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

Заполните самостоятельно (рисунок и/или код)

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

Заполните самостоятельно (рисунок и/или код)

Стеки, очереди, деки

Для стека/очереди – проще псевдокод, можно код для одного из представлений (для всех случаев- при наличии времени). Для дека ограничьтесь утверждением, что его можно представить как комбинацию стеков/очередей, а алгоритмы рассмотрены выше.

Выберем для линейного списка операции получения доступа, добавления и удаления i-го узла, разрешив их только на концах списка (i=1,i=n) и, в зависимости от допустимого набора операций, определим ряд списковых структур.

СТЕКИ

  • Более подробно см.: 519 П68 Прайс Д. Программирование на языке Паскаль.-М.:Мир,1987.

  • СТЕК(Stack,дисциплина обслуживания LIFO, Last-In-First-Out - "последним пришел – первым ушел")

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