Изучение языка программирования
Турбо Паскаль (Turbo Pascal)

На этом сайте можно: скачать среду программирвания Турбо Паскаль, изучить язык программирования Турбо Паскаль, а так же скачать программы на языке Турбо Паскаль!
Решенные задачи на языке Паскаль



Сортировка связанного списка.
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 - первая запись с конца!}
Данный пример показывает: как вводить данные в список с помощью меню, как вывести список на экран, как отсортировать список, как освободить пямять занимаемую списком.
Скачать исходник