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

22. Очередь: понятие, описание в программе, основные операции

Очередь – это структура данных, представляющая собой последовательность элементов, образованная в порядке их поступления. Каждый новый элемент размещается в конце очереди; элемент, стоящий в начале очереди, выбирается из нее первым. В очереди используется принцип доступа к элементам FIFO (First Input – First Output, "первый пришёл – первый вышел"). В очереди доступны два элемента (две позиции): начало очереди и конец очереди. Поместить элемент можно только в конец очереди, а взять элемент только из ее начала.

Основные операции, производимые с очередью:

type

pEl=^El;

El=Record

d:integer;

next:pEl;

end;

var pBeg, pEnd: pEl;

pHelp:pEl;

procedure CreateOch;

begin

New(pBeg);

New(pEnd);

pBeg.d:=1;

pEnd.d:=-1;

pEnd.next:=nil;

pBed.next:=pEnd;

end;

procedure Add(x:Integer);

begin

New(pHelp);

pHelp.d:=-1;

pHelp.next:=nil;

pEnd.d:=x;

pEnd.next:=pHelp;

pEnd:=pHelp;

end;

function Del:Integer;

begin

If pBeg.next<>pEnd then

begin

Result:=pBeg.next.d;

pBeg.next:=pBeg.next.next;

end;

end;

procedure ShowOch;

begin

pHelp:=pBeg.next;

while pHelp.next<>nil do

begin

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

pHelp:=pHelp.next;

end;

end;

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

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

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

Структура данных для всех динамических структур данных одинакова

type

pEl=^El;

El=record

d: integer;

next: pEl;

end;

var pBeg, pEnd :pEl;

pHelp:pEl;

Операции, которые можно делать со списком:

-создание;

- добавление в начало, в середину, в конец;

- добавление в пустой список;

- удаление из начала, из середины, конца;

- удаление последнего элемента;

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

procedure CreateOch;

begin

New(pBeg);

New(pEnd);

pBeg.d:=1;

pEnd.d:=-1;

pEnd.next:=nil;

pBed.next:=pEnd;

end;

procedure Add(x:Integer);

begin

New(pHelp);

pHelp.d:=-1;

pHelp.next:=nil;

pEnd.d:=x;

pEnd.next:=pHelp;

pEnd:=pHelp;

end;

function Del:Integer;

begin

If pBeg.next<>pEnd then

begin

Result:=pBeg.next.d;

pBeg.next:=pBeg.next.next;

end;

end;

procedure ShowOch;

begin

pHelp:=pBeg.next;

while pHelp.next<>nil do

begin

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

pHelp:=pHelp.next;

end;

end;

Добавление элемента перед элементом с номером k

procedure Add(x,n:integer);

var k:integer;

begin

pHelp:=pBeg.next;

k:=1;

while pHelp.next<>nil do

begin

pHelp:=pHelp.next;

k:=k+1;

If k=n-1 then break;

end;

If k<n-1 then

begin

New(pHelp);

pHelp.d:=-1;

pHelp.next:=nil;

pEnd.d:=x;

pEnd.next:=pHelp;

pEnd:=pHelp;

end

else

begin

New(pHelp2);

pHelp2.d:=x;

pHelp2.next:=pHelp.next;

pHelp.next:=pHelp2;

end;

end;

Удаление элемента с номером k

procedure Del(k:Integer);

var n:Integer;

begin

n:=-1;

pHelp:=pBeg;

while pHelp.next<>nil do

begin

If n=k-1 then break;

n:=n+1;

pHelp:=pHelp.next;

end;

If n=k-1 then

pHelp.next:=pHelp.next.next;

end;