Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Нестеров.docx
Скачиваний:
3
Добавлен:
22.09.2019
Размер:
267.49 Кб
Скачать

19. Линейные списки. Основные операции над линейными списками.

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

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

  1. Получить доступ к k-му узлу списка, чтобы проанализировать и/или изменить содержимое его полей.

  2. Включить новый узел непосредственно перед k-м узлом.

  3. Исключить k-й узел.

  4. Объединить два (или более) линейных списка в один список.

  5. Разбить линейный список на два (или более) списка.

  6. Сделать копию линейного списка.

  7. Определить количество узлов в списке.

  8. Выполнить сортировку узлов списка в возрастающем порядке по некоторым полям в узлах.

  9. Найти в списке узел с заданным значением в некотором поле.

Специальные случаи k=1 и k=n в операциях 1), 2) и 3) особо выделяются, поскольку в линейном списке проще получить доступ к первому и последнему элементу, чем к произвольному элементу.

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

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

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

Стек называли списком LIFO (last-in-firs-down - последний вошел - первый вышел)

Очередь иногда называют списком типа FIFO (first-in-first-out - первый вошел - первый вышел).

21. Стек: понятие, описание в программе, основные операции

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

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

type

pEl=^El;

El=record

d: integer;

next:pEl;

end;

var pTop:pEl;

pHelp:pEl;

procedure CreateSt;

begin

New(pTop);

pTop.next:=nil;

pTop.d:=-1;

end;

procedure Add(x:Integer);

begin

New(pHelp);

pHelp.next:=pTop;

pHelp.d:=x;

pTop:=pHelp;

end;

function Del:Integer;

begin

If pTop.next<>nil then

begin

pHelp:=pTop;

pTop:=pTop.next;

Dispose(pHelp);

end;

end;

procedure ShowSt;

begin

pHelp:=pTop;

while pHelp.next<>nil do

begin

Memo1.Lines.Add(IntToStr(pHelp.d));

pHelp:=pHepl.next;

end;

end;