Akaleaf

ListLink

Nov 18th, 2018
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.30 KB | None | 0 0
  1. program ListLink;
  2.  
  3. uses
  4. crt;
  5.  
  6. type
  7.   TpListElement = ^TListElement;
  8.   TListElement = record
  9.     info : integer;
  10.     previous : TpListElement;
  11.     next : TpListElement;
  12.   end;
  13.  
  14. var
  15.   pListFirst : TpListElement;
  16.   pTemp : ^TListElement;
  17.   answer : char;
  18.   element, count : integer;
  19.   listIsEmpty : boolean;
  20.  
  21. procedure pushAfter();
  22. var
  23.   pTemp, pTempPrev, pTempNext : TpListElement;
  24.   element, afterElement : integer;
  25. begin
  26.   new(pTemp);
  27.   if (count = 0) then
  28.   begin
  29.     write('List is empty. Enter the first element: ');
  30.     readln(element);
  31.     pTemp^.info := element;
  32.     count += 1;
  33.     pListFirst := pTemp;
  34.   end else
  35.   begin
  36.     write('Enter the element: ');
  37.     readln(element);
  38.     write('Enter the element AFTER which you want to add a new one: ');
  39.     readln(afterElement);
  40.     pTempPrev := pListFirst;
  41.     while (pTempPrev^.info <> afterElement) do
  42.     begin
  43.       pTempPrev := pTempPrev^.next;
  44.     end;
  45.     pTemp^.info := element;
  46.     count += 1;
  47.     pTempNext := pTempPrev^.next;
  48.     pTempPrev^.next := pTemp;
  49.     pTemp^.previous := pTempPrev;
  50.     if (pTempNext <> nil) then pTempNext^.previous := pTemp;
  51.     pTemp^.next := pTempNext;
  52.   end;
  53. end;
  54.  
  55. procedure pushBefore();
  56. var
  57.   pTemp, pTempPrev, pTempNext : TpListElement;
  58.   element, beforeElement : integer;
  59. begin
  60.   new(pTemp);
  61.   if (count = 0) then
  62.   begin
  63.     write('List is empty. Enter the first element: ');
  64.     readln(element);
  65.     pTemp^.info := element;
  66.     count += 1;
  67.     pListFirst := pTemp;
  68.   end else
  69.   begin
  70.     write('Enter the element: ');
  71.     readln(element);
  72.     write('Enter the element BEFORE which you want to add a new one: ');
  73.     readln(beforeElement);
  74.     pTempNext := pListFirst;
  75.     while (pTempNext^.info <> beforeElement) do
  76.     begin
  77.       pTempNext := pTempNext^.next;
  78.     end;
  79.     pTemp^.info := element;
  80.     count += 1;
  81.     pTempPrev := pTempNext^.previous;
  82.     pTemp^.previous := pTempPrev;
  83.     if (pTempPrev <> nil) then pTempPrev^.next := pTemp;
  84.     pTemp^.next := pTempNext;
  85.     if (pTempNext^.previous = nil) then pListFirst := pTemp;
  86.     pTempNext^.previous := pTemp;
  87.   end;
  88. end;
  89.  
  90. procedure pop();
  91. var
  92.   pTemp, pTempPrev, pTempNext : TpListElement;
  93.   element : integer;
  94. begin
  95.   write('Enter the element to remove: ');
  96.   readln(element);
  97.   pTemp := pListFirst;
  98.   while (pTemp^.info <> element) do pTemp := pTemp^.next;
  99.   pTempPrev := pTemp^.previous;
  100.   pTempNext := pTemp^.next;
  101.   if (pTempNext <> nil) then pTempNext^.previous := pTempPrev;
  102.   if (pTempPrev <> nil) then pTempPrev^.next := pTempNext else pListFirst := pTempNext;
  103.   dispose(pTemp);
  104.   count -= 1;
  105. end;
  106.  
  107. procedure output;
  108. var
  109.   pTemp : TpListElement;
  110. begin
  111.   pTemp := pListFirst;
  112.   while (pTemp <> nil) do
  113.   begin
  114.     write(pTemp^.info, ' ');
  115.     pTemp := pTemp^.next;
  116.   end;
  117.   writeln;
  118.   writeln('Count: ', count);
  119. end;
  120.  
  121. begin
  122.   count := 0;
  123.  
  124.   repeat
  125.     writeln('1. Add element AFTER');
  126.     writeln('2. Add element BEFORE');
  127.     writeln('3. Remove element');
  128.     writeln('4. Output');
  129.     readln(answer);
  130.     case answer of
  131.     '1':
  132.       begin
  133.         pushAfter;
  134.       end;
  135.     '2':
  136.       begin
  137.         pushBefore;
  138.       end;
  139.     '3':
  140.       begin
  141.         pop;
  142.       end;
  143.     '4':
  144.       begin
  145.         output;
  146.       end;
  147.     end;
  148.  
  149.   until (answer = 'n');
  150.  
  151. end.
Advertisement
Add Comment
Please, Sign In to add comment