Другие языки программирования и технологии

На паскале Упорядочить список по другому способу – в порядке возрастания длины фамилии (количества символов в фамилии).

На паскале, упорядочить список по другому способу – в порядке возрастания длины фамилии (количества символов в фамилии). в уже имеющимся коде.
ок, сделал.. посмотрел и удалил
Михаил Иванов
Михаил Иванов
66 685
Лучший ответ
type
//Тип основных данных.
TData = Integer;
//Тип указателя на элемент списка.
TPElem = ^TElem;
//Тип элемента списка.
TElem = record
Data : TData; //Основные данные.
PNext : TPElem; //Указатель на следующий элемент списка.
end;
//Тип, описывающий однонаправленный список.
TList = record
PFirst, PLast : TPElem; //Указатели на первый и на последний элементы списка.
end;
//Начальная инициализация списка. Внимание! Эту процедуру можно выполнять
//только в отношении пустого списка! Иначе - будут утечки памяти.
procedure Init(var aList : TList);
begin
aList.PFirst := nil;
aList.PLast := nil;
end;
//Добавление элемента в конец однонаправленного списка.
procedure Add(var aList : TList; const aData : TData);
var
PElem : TPElem;
begin
New(PElem);
PElem^.Data := aData;
PElem^.PNext := nil;
if aList.PFirst = nil then
aList.PFirst := PElem
else
aList.PLast^.PNext := PElem;
aList.PLast := PElem;
end;
//Удаление элемента из однонаправленного списка по указателю на предыдущий элемент.
//Если указатель на предыдущий элемент равен NIL, то удаляется первый элемент списка.
procedure Del(var aList : TList; var aPPrev : TPElem);
var
PDel : TPElem;
begin
if aList.PFirst = nil then Exit;
if aPPrev = nil then begin
PDel := aList.PFirst;
aList.PFirst := PDel^.PNext;
end else begin
PDel := aPPrev^.PNext;
if PDel <> nil then aPPrev^.PNext := PDel^.PNext;
end;
if aList.PLast = PDel then aList.PLast := aPPrev;
if PDel <> nil then Dispose(PDel);
end;
//Удаление однонаправленного списка из памяти и инициализация.
procedure Free(var aList : TList);
var
PNext, PDel : TPElem;
begin
PNext := aList.PFirst;
while PNext <> nil do begin
PDel := PNext;
PNext := PNext^.PNext;
Dispose(PDel);
end;
Init(aList);
end;
//Распечатка однонаправленного списка.
procedure Print(const aList : TList);
var
PElem : TPElem;
begin
if aList.PFirst = nil then begin
Writeln('Список пуст.');
Exit;
end;
PElem := aList.PFirst;
while PElem <> nil do begin
if PElem <> aList.PFirst then Write(', ');
Write(PElem^.Data);
PElem := PElem^.PNext;
end;
end;
var
L : TList;
PElem, PPrev : TPElem;
Data : TData;
i, Code : Integer;
S : String;
begin
//Начальная инициализация списка.
Init(L);
короче не влезает

Похожие вопросы