Реферат: Двунаправленный динамический список
После завершения цикла или вывода сообщения, процедура просмотра завершается.
Процедура сортировки “Sortir”.
Для этой процедуры применена локальная переменная “tmp” типа “ukazat”. Здесь сначала проверяется наличие элементов в списке.
Если список содержит элементы, то переменной “m” присваивается значение “true”, затем выполняется цикл, пока “m=true”. В цикле переменной “m” присваивается значение “false”, указателю на текущий элемент (temp) присваивается указатель на первый элемент в списке (first), и выполняется вложенный цикл, пока указатель на следующий элемент внутри текущего не равен “nil”. В этом цикле проверяется какой элемент больше.
Если текущий элемент окажется больше чем следующий за ним элемент, тогда переменной “m” присваивается значение “true”, и проверяется местонахождение текущего элемента в списке. Если он окажется в начале списка, то указателю на первый элемент в списке (first) присваивается указатель на следующий элемент за текущим, а иначе указателю на следующий элемент (next) внутри предыдущего перед текущим элементом присваивается указатель на следующий элемент внутри текущего. Если же текущий элемент окажется в конце списка, тогда указателю на последний элемент в списке присваивается указатель на текущий элемент, а локальной переменной “tmp” присваивается значение “nil”, а иначе указателю на предыдущий элемент (prev) следующего элемента после следующего за текущим элементом присваивается указатель на текущий элемент, а локальной переменной (tmp) присваивается указатель на следующий элемент после следующего за текущим элементом. После выяснения местоположения и выполнения некоторых команд, указателю на следующий элемент после следующего за текущим элементом присваивается указатель на текущий элемент, указателю на предыдущий элемент следующего за текущим элементом присваивается указатель на предыдущий элемент перед текущим; а внутри текущего элемента указателю на предыдущий перед текущим присваивается указатель на следующий элемент за текущим, и указателю на следующий элемент за текущим присваивается локальная переменная “tmp”. Если же текущий элемент окажется не больше чем следующий за ним элемент, тогда указателю на текущий элемент (temp) присваивается указатель на следующий за ним элемент (next). На этом выполнение вложенного цикла завершается.
Переменной “m” снова присваивается значение “false”, а указателю на текущий элемент (temp) присваивается указатель на последний элемент в списке (cut), и выполняется ещё один вложенный цикл, пока указатель на предыдущий элемент внутри текущего не равен “nil”. В этом цикле проверяется какой элемент меньше.
Если текущий элемент окажется меньше чем предыдущий перед ним элемент, тогда переменной “m” присваивается значение “true”, и проверяется местонахождение текущего элемента в списке. Если он окажется в конце списка, то указателю на последний элемент в списке (cut) присваивается указатель на предыдущий элемент перед текущим, а иначе указателю на предыдущий элемент (prev) внутри следующего за текущим элементом присваивается указатель на предыдущий элемент внутри текущего. Если же текущий элемент окажется в начале списка, тогда указателю на первый элемент в списке присваивается указатель на текущий элемент, а локальной переменной “tmp” присваивается значение “nil”, а иначе указателю на следующий элемент (next) предыдущего элемента перед предыдущим до текущего элемента присваивается указатель на текущий элемент, а локальной переменной (tmp) присваивается указатель на предыдущий элемент перед предыдущим до текущего элемента. После выяснения местоположения и выполнения некоторых команд, указателю на предыдущий элемент перед предыдущим до текущего элемента присваивается указатель на текущий элемент, указателю на следующий элемент предыдущего перед текущим элементом присваивается указатель на следующий после текущего; а внутри текущего элемента указателю на следующий элемент присваивается указатель на предыдущий элемент, и указателю на предыдущий элемент присваивается локальная переменная “tmp”. Если же текущий элемент окажется не меньше чем предыдущий перед ним элемент, тогда указателю на текущий элемент (temp) присваивается указатель на предыдущий перед ним элемент (prev). На этом выполнение вложенного цикла завершается.
Если во время поверки наличия элементов в списке окажется, что он пуст, то выводится сообщение: «Таблица пуста».
После завершения цикла или вывода сообщения, процедура сортировки завершается.
Листинг программного изделия на языке программирования “Pascal”.
Program kursovik;
uses crt;
type Ukazat=^Inform;
Inform=record fam:string[15];
name:string[15];
fanem:string[15];
bethday:string[21];
zodiak:string[8];
next:Ukazat;
prev:Ukazat;
end;
var temp,first,cut:Ukazat;
ch:char;
s1,s2:string;
n:integer;
m:boolean;
ffam,fname,ffanem:string[10];
Procedure Dobav;
begin