Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program List;
- {$APPTYPE CONSOLE}
- uses
- SysUtils;
- type
- //Тип основных данных.
- TData = string[10];
- //Тип указателя на элемент списка.
- 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;
- //Удаление последнего элемента
- procedure Del(var aList : TList);
- var
- x,dx : TPElem;
- begin
- if aList.PFirst = nil then Exit;
- x := aList.PFirst;
- while x^.PNext<>Nil do
- Begin
- dx := x;
- x := x^.PNext
- End;
- dx^.PNext := Nil;
- Dispose(x);
- end;
- procedure Print(const aList : TList);
- var
- PElem : TPElem;
- i : integer;
- begin
- if aList.PFirst = nil then begin
- Writeln('Список пуст.');
- Exit;
- end;
- i := 1;
- PElem := aList.PFirst;
- while PElem <> nil do begin
- if PElem <> aList.PFirst then Write(', ');
- Write(i,') ');
- Writeln(PElem^.Data);
- i := i + 1;
- PElem := PElem^.PNext;
- end;
- end;
- function RandString : string;
- const chars = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
- var
- Str : string;
- i : integer;
- begin
- Str := '';
- for i := 1 to 10 do Str := Str + chars[random(length(chars))+1];
- result := Str;
- end;
- var
- L : TList;
- PElem, PPrev : TPElem;
- Data : TData;
- i, Code, randRange : Integer;
- Word : String;
- begin
- //Начальная инициализация списка.
- Init(L);
- Randomize;
- randRange := 10 + random (50);
- for i := 1 to randRange do begin
- Word := RandString;
- Add(L, Word);
- end;
- writeln('Unmodified list:');
- Print(L);
- Del(L);
- writeln('Last element deleted:');
- Print(L);
- Readln;
- end.
Advertisement
Add Comment
Please, Sign In to add comment