Akaleaf

ListLinkOne

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