Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры ОАиП(теория).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
151.01 Кб
Скачать

20.Алгоритмы удаления записей типизированного файла.

var

Rec: MyRecord;

F: file of MyRecord;

I: integer;

begin

If FileSize(F) = 1 Then

ReWrite(F)

Else

begin

Seek(F,Num);

For I := FilePos(F) To FileSize(F) - 1 Do

Begin

Seek(F,I);

Read(F,Proger);

Seek(F,I-1);

Write(F,Rec)

End;

Truncate(F);

end;

19.Сортировка естественным слиянием.

В случае прямого слияния мы не получаем никакого преимущества, если данные уже

являются частично упорядоченными. Размер сливаемых при каждом проходе

последовательностей не зависит от существования более длинных уже упорядоченных

последовательностей, которые можно было бы просто объединить.

Сортировка, при которой всегда сливаются две самые длинные из возможных

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

Эта сортировка является двухфазной сортировкой слиянием с тремя

лентами(файлами).

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

Пусть имеется начальный файл А. Каждый проход состоит из фазы распределения

серий из фалйа А поровну в файлы В и С и фазы слияния, объединяющей серии из

файлов В и С в файл А.

Процесс сортировки заканчивается, как только в файле А останется только одна

серия.

Рассмотрим сортировку естественным слиянием на примере (серии подчеркнуты).

Реализация:

var f,q:text;

s1,s2,t:string;

b:boolean;

c,count:integer;

begin

assign(f,'file.txt');

b:=false;

count:=0;

repeat

assign(q,'temp.txt');

c:=0; inc(count);

reset(f);

rewrite(q);

if b and not(eof(f)) then

begin

readln(f,s1);

writeln(q,s1);

end;

while not(eof(f)) do

begin

readln(f,s1);

if not(eof(f)) then

begin

readln(f,s2);

if s2<s1 then

begin

t:=s2;

s2:=s1;

s1:=t;

c:=c+1;

end;

writeln(q,s1);

writeln(q,s2);

end

else writeln(q,s1);

end;

erase(f);

rename(q,'file.txt');

close(q);

b:=not b;

until (c=0) and (count>1);

writeln('Fayl bil perepisan ',count,' raz.');

end.

28. Динамическая структура очередь, ее создание и использование.

Очередь (queue) — это такой последовательный список с переменной длиной, включение элементов в который происходит с одной стороны, а исключение — с другой стороны списка. Она функционирует по принципу FIFO (First In — First Out, т. е. "первым пришел — первым вышел"), Та сторона, с которой осуществляется добавление элементов, называется хвостом (или концом) очереди, другая — головой. Для индикации хвоста и головы организуется два указателя (см. рис. 6.2): указатель головы (head pointer) и указатель хвоста (tail pointer).

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