Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo Pascal / Stud_1_1 / LecRus / MainPart.doc
Скачиваний:
117
Добавлен:
03.03.2016
Размер:
5.03 Mб
Скачать

2. Добавление нового элемента в очередь.

Read(k);

New(Run); Run^.Inf:=k;

Run^.Next:=nil;

If L=nil then

L:=Run

Else

R^.Next:=Run;

R:=Run;

3. Удаление элемента из очереди.

Run:=L; L:=L^.Next;

Dispose(Run);

4. Просмотр и удаление очереди выполняются так же, как и для стека.

5. Формирование циклической очереди (рис.19).

Для получения такой очереди достаточно установить

R^.Next:= L .

Для входа в циклическую очередь можно использовать любой из указателей R или L.

6. Удаление произвольного элемента из очереди.

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

Program DelMinElem;

Type PoinType = ^DynType;

DynType = record

Inf : integer;

Next : PoinType;

end;

Var L, { указатели левого и правого }

R, { концов очереди }

Run, { текущий указатель }

Pmin : PoinType; { указатель элемента, предшествующего }

{ минимальному элементу очереди }

InfMin : integer; { значение минимального элемента }

F : text;

Begin

Формирование очереди

If L<>nil then

Begin

InfMin:=L^.Inf; Pmin:=L;

Run:=L;

While Run^.Next<>nil do

Begin

If Run^.Next^.Inf<InfMin then

Begin

InfMin:=Run^.Next^.Inf; Pmin:=Run;

End;

Run:=Run^.Next;

End;

If InfMin=L^.Inf then { удаление первого элемента }

Begin { с переносом указателя L }

L:=L^.Next; Dispose(Pmin);

End

Else

Begin

If Pmin^.Next=R then { перенос R при удалении }

R:=Pmin; { последнего элемента }

Run:=Pmin^.Next; { удаление произвольного}

Pmin^.Next:=Pmin^.Next^.Next;{ элемента (в том }

Dispose(Run); { числе последнего) }

End;

End;

Печать очереди

End.

Если минимальным является первый или второй элементы очереди, то в обоих случаях Pmin = L. Поэтому для указания о том, является ли первый элемент минимальным, в программе производится проверка InfMin = L^.Inf.

7. Добавление нового элемента в произвольное место очереди.

Предположим, что элементы очереди упорядочены по убыванию; требуется добавить в очередь целочисленное значение b без нарушения ее упорядоченности.

Вполне очевидно, что в частном случае элемент b может быть добавлен слева, справа или в середину очереди.

Program InsNewElem;

Label 10;

Type PoinType = ^DynType;

DynType = record

Inf : integer;

Next : PoinType;

end;

Var L,R, { левый и правый указатели }

Run, { текущий указатель }

NewEl : PoinType; { указатель нового элемента }

b : integer; { значение нового элемента }

Cond : boolean;

Begin

Формирование очереди

Read(b);

New(NewEl); NewEl^.Inf:=b;

If L=nil then { очередь пустая }

Begin

L:=NewEl; R:=NewEl; NewEl^.Next:=nil;

End

Else

If b>=L^.Inf then { добавление слева }

Begin

NewEl^.Next:=L; L:=NewEl

End

Else

If b<=R^.Inf then { добавление справа }

Begin

NewEl^.Next:=nil; R^.Next:=NewEl; R:=NewEl

End

Else

Begin { добавление в середину }

Run:=L;

While Run^.Next<>nil do

Begin

If Run^.Next^.Inf<b then

Begin

NewEl^.Next:=Run^.Next; Run^.Next:=NewEl;

Goto 10

End;

Run:=Run^.Next;

End;

End;

10:

Печать очереди

End.

О Б Р А Б О Т К А Д Е К А

Дек - это двунаправленный список, в котором включение и исключение элементов делаются на обоих концах списка (рис.20).

Соседние файлы в папке LecRus