blamed

List

Dec 22nd, 2012
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.54 KB | None | 0 0
  1. program List;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   SysUtils;
  7.  
  8. type
  9.   //Тип основных данных.
  10.   TData = string[10];
  11.   //Тип указателя на элемент списка.
  12.   TPElem = ^TElem;
  13.   //Тип элемента списка.
  14.   TElem = record
  15.     Data : TData; //Основные данные.
  16.     PNext : TPElem; //Указатель на следующий элемент списка.
  17.   end;
  18.   //Тип, описывающий однонаправленный список.
  19.   TList = record
  20.     PFirst, PLast : TPElem; //Указатели на первый и на последний элементы списка.
  21.   end;
  22.  
  23. //Инициализация списка.
  24. procedure Init(var aList : TList);
  25. begin
  26.   aList.PFirst := nil;
  27.   aList.PLast := nil;
  28. end;
  29.  
  30. // Добавление элемента в конец списка
  31. procedure Add(var aList : TList; const aData : TData);
  32. var
  33.   PElem : TPElem;
  34. begin
  35.   New(PElem);
  36.   PElem^.Data := aData;
  37.   PElem^.PNext := nil;
  38.   if aList.PFirst = nil then
  39.     aList.PFirst := PElem
  40.   else
  41.     aList.PLast^.PNext := PElem;
  42.   aList.PLast := PElem;
  43. end;
  44.  
  45. //Удаление последнего элемента
  46. procedure Del(var aList : TList);
  47.  
  48. var
  49.   x,dx : TPElem;
  50.  
  51. begin
  52.   if aList.PFirst = nil then Exit;
  53.   x := aList.PFirst;
  54.   while x^.PNext<>Nil do
  55.   Begin
  56.     dx := x;
  57.     x := x^.PNext
  58.   End;
  59.   dx^.PNext := Nil;
  60.   Dispose(x);
  61. end;
  62.  
  63. procedure Print(const aList : TList);
  64. var
  65.   PElem : TPElem;
  66.   i : integer;
  67. begin
  68.   if aList.PFirst = nil then begin
  69.     Writeln('Список пуст.');
  70.     Exit;
  71.   end;
  72.   i := 1;
  73.   PElem := aList.PFirst;
  74.   while PElem <> nil do begin
  75.     if PElem <> aList.PFirst then Write(', ');
  76.     Write(i,') ');
  77.     Writeln(PElem^.Data);
  78.     i := i + 1;
  79.     PElem := PElem^.PNext;
  80.   end;
  81. end;
  82.  
  83.  
  84. function RandString : string;
  85. const chars = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  86. var
  87.   Str : string;
  88.   i : integer;
  89. begin
  90.   Str := '';
  91.   for i := 1 to 10 do Str := Str + chars[random(length(chars))+1];
  92.   result := Str;
  93. end;
  94.  
  95. var
  96.   L : TList;
  97.   PElem, PPrev : TPElem;
  98.   Data : TData;
  99.   i, Code, randRange : Integer;
  100.   Word : String;
  101.  
  102. begin
  103.   //Начальная инициализация списка.
  104.   Init(L);
  105.  
  106.   Randomize;
  107.   randRange := 10 + random (50);
  108.   for i := 1 to randRange do begin
  109.     Word := RandString;
  110.     Add(L, Word);
  111.   end;
  112.  
  113.   writeln('Unmodified list:');
  114.   Print(L);
  115.   Del(L);
  116.   writeln('Last element deleted:');
  117.   Print(L);
  118.   Readln;
  119. end.
Advertisement
Add Comment
Please, Sign In to add comment