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

Линейные динамические списки.

Линейные однонаправленные список представляет собой последовательность элементов, каждый из которых состоит как минимум из двух частей:

1) информационная часть (в ней содержится данные которые несут различного рода информацию(содержание элементов)

2) порядковая или адресная часть в ней находиться данные информирующие о расположении следующего узла списка.

В линейных списках каждый узел кроме последнего указывает только на один узел списка, последний узел ни на что не указывает (в адресной части значениеNIl) исходя из этого структура однонаправленного списка следующая:

Кроме списка такой структуры могут быть организованы циклические динамические списки:

Двунаправленные списки

Деревья

Определение элемента однонаправленного линейного списка.

Для определения узла списка используется запись состоящая из двух полей информационного и адресного, при этом предварительно делается описание указательного типа на запись.

Пример построения линейного списка:

Type

Pn=^node;

Node=record

Info:byte;

Next:pn;

End;

Var

C:pn;

.

.

New(c); адрес нового элемента записан в С.

Существуют два основных типа организации списков

1)организации списка типа fifo;(очередь)

2) организации списка типа lifo;(стек или магазин).

При добавление в список типа стек каждый новый узел добавляется в его начало.

А при добавление в список типа очередь новый элемент добавляется в конец.

Организация динамических списков и операции над ними.

Организация списков представляет собой размещение их узлов в динамической памяти и установки между ними связи.

1.Организация списка типа стек.

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

Пример: Организация стека из трех элементов:

Type

Pn=^node;

Node=record

Info:byte;

Next:pn;

End;

Var

B,c:pn;

I:byte;

.

.

B:=nil;{1}

For I:=1 to 3 do

Begin

New(c);{2}

C^.next:=b;{3}

c^.info:=I;{4}

b:=c;{5}

End;

Комментарии

1-указатель на вершину списка устанавливается в nil (вершина списка неопределенна).

2-в динамической памяти выделяется место под очередной создаваемый элемент адрес которого записывается в С.

3- формируется поле next узла куда заноситься адрес предыдущего узла списка или значение nil если создаваемый узел первый (в списке он будет последним).

4-формируеться значение информационной части узла.

5-формируеться значение указателя В созданный узел становиться первым.

Схема формирования списка.

2.Формирование списка типа очередь(fifo).

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

Используемые указатели

В-указатель на начало списка.

С-указатель, который в начале каждой итерации будет указывать на предыдущий элемент относительно созданного элемента.

Е-указатель, связанный с создаваемым узлом списка.

Пример: Формирование списка.

.

.

Var

B,c,e:pn;

I:byte;

Begin

B:=nil;

C:=nil;

{1}

For i:=1 to 3 do

Begin

New(E);{2}

E^.next:=nil;{3}

E^.info:=I;{4}

Fi c=nil then b:=E{5a} else c^.next:=E;{5b}

C:=E;[6]

End;

Комментарии

1-указатели В и С устанавливаются неопределенными т.е. списка нет.

2-формируеться узел списка адрес, которого записывается в указатель Е.

3-формируеться адресное поле нового узла, куда записывается значение nil поскольку каждый новый узел считается последним.

4-формируеться информационная часть узла.

5а-если созданный узел первый (С=nil) то указатель на начало связывается с этим узлом.

5б-если созданный узел не является первым то устанавливается связь предыдущего узла с созданным.

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

Чтобы список стал циклическим надо E^.next:=В;

СХЕМА формировании списка.

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

К основным операциям работы со списками относят: 1)добавление элемента в список;2)просмотр списка;3) вставка элемента;4) удаление элемента; 5) удаление всего списка.