TYPE
Link=^data; {указатель на тип данных }
data=record {описание самого типа данных }
FIO:string[50]; {ФИО }
N:integer; {номер }
next:Link; {указатель (адрес) на следующую запись}
end;
VAR
P,First:Link; {указатели на запись: текущую, первую }
m:byte; {для меню }
{процедура - добавление новой записи в список}
PROCEDURE AddData;
BEGIN
P:=new(Link); { выделить память и адрес записать в P}
P^.next:=First; { адрес на следующую запись }
First:=P; { сохраняем адрес первой записи }
{здесь заполняйте запись данными в соответствии с вашим типом }
write('Введите ФИО: ');
readln(P^.FIO);
write('Введите номер: ');
readln(P^.N);
END;
{вывод на экран}
PROCEDURE Print;
var
count:integer; {счетчик для нумерации }
BEGIN
count:=0;
P:=First; {начать с первой записи }
while P<>nil do
begin
inc(count); {увеличить счетчик }
writeln(count,') ',P^.FIO,' ',P^.N);
P:=P^.next; {перейти к очередной записи }
end;
readln;
END;
{процедура - удаление всего списка, освобождение динамической памяти}
PROCEDURE DelData;
BEGIN
P:=First;
while P<>nil do
begin
First:=P^.next; {сохранить адрес указывающий на следующую запись}
dispose(P); {освободить память по текущему адресу }
P:=First; {сохраненный адрес записать в P }
end;
END;
{процедура - сортировки списка по возрастанию}
PROCEDURE Sort;
var
P1,P2,TMP:Link; {P1,P2 - адрес записи для циклов, TMP - временно}
BEGIN
new(TMP); {выделим память для TMP }
P1:=First; {начать цикл 1 с первой записи }
while P1<>nil do {выполняем пока не дошли до конца цикла 1}
begin
P2:=First; {начать цикл 2 с первой записи }
while P2<>nil do {выполняем пока не дошли до конца цикла 2}
begin
if P1^.N<P2^.N then
begin
{сохраняем данные в временную переменную}
{адрес на следующую запись не изменяем! }
TMP^.FIO:=P1^.FIO;
TMP^.N:=P1^.N;
{делаем обмен данными по адресу P1 }
P1^.FIO:=P2^.FIO;
P1^.N:=P2^.N;
{делаем обмен данными по адресу P2 }
P2^.FIO:=TMP^.FIO;
P2^.N:=TMP^.N;
end;
P2:=P2^.next; {переходим к следующей записи цикла 2}
end;
P1:=P1^.next; {переходим к следующей записи цикла 1}
end;
dispose(TMP); {освобождаем память, занимаемую TMP }
END;
{==== основная программа ====}
BEGIN
First:=nil; {нет записей в списке, адрес пустой }
repeat { меню }
AddData;
writeln('1 - добавить новую запись');
writeln('2 - выйти и далее...');
write('=>');
readln(m);
until m=2; {end меню}
writeln('== До сортировки ==');
Print;
Sort;
writeln('== После сортировки ==');
Print;
DelData;
END.
{Примечание: First - первая запись с конца!}
Похожие записи/страницы:
- Написать программу посещения студентами дисплейного класса. Учесть приход и уход студентов в течение занятий.…
- Создать связанный список телефонный справочник- Pascal(Паскаль)
- В файл заносится неупорядоченный список абонентов телефонной сети в формате: фамилия, имя, отчество, адрес,…
- Последовательность целых чисел заносится в файл. Прочитать из файла последовательность и записать в память в…
- Cоздать файл из списка 10 студентов с их оценками ( номер, Ф.И.О. и три оценки). Вывести его содержимое на…
- Описать запись с именем Student, содержащую следующие поля: ФИО (Вася Иванов); Номер группы(2-PO-3), Дата…
- Описать процедуру или функцию, которая переворачивает список L, т.е. изменяет ссылки в этом списке так, чтобы…
- Опишите запись с именем типа Baza, содержащую информацию для школьной базы данных:1. Личный номер ученика (тип…