Advertisement
Guest User

Untitled

a guest
Dec 7th, 2015
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.97 KB | None | 0 0
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. //Lista jednokierunkowa
  8.  
  9. uses
  10. System.SysUtils;
  11.  
  12.  
  13. type ptr=^element;
  14. element=record
  15. key:integer;
  16. next:ptr;
  17. end;
  18.  
  19. var
  20. first:ptr;
  21.  
  22. //Dodawanie elementu na początek listy
  23. procedure Dodaj (k:integer);
  24. var temp: ptr;
  25. begin
  26. New(temp);
  27. temp^.key:=k;
  28. temp^.next:=first;
  29. first:=temp;
  30. end;
  31.  
  32. //Wyświetlanie całej listy
  33. procedure Wyswietl;
  34. var temp: ptr;
  35. begin
  36. temp:=first;
  37. while(temp<>nil) do
  38. begin
  39. writeln(temp^.key);
  40. temp:=temp^.next;
  41. end;
  42. end;
  43.  
  44. //Wstawianie elementu na listę posortowaną
  45. procedure wstawianie(k:Integer);
  46. var
  47. temp: ptr;
  48. prev: ptr;
  49. begin
  50. New(temp);
  51. temp^.key:=k;
  52. //1 przyp - kiedy lisat jest pusta lub znajduje się na niej jeden element
  53. if (first = nil) or (temp^.key < first^.key) then
  54. begin
  55. temp^.next:=first;
  56. first:=temp;
  57. end
  58. else
  59. begin
  60. prev:=first;
  61. while (prev^.next<>nil) and (prev^.next.key < k) do
  62. prev:=prev^.next;
  63. temp^.next:=prev.next;
  64. prev^.next:=temp;
  65. end;
  66. end;
  67.  
  68. //usuwanie elementu o kluczu k. usuwa tylko pierwszy napotkany element o danym kluczu
  69. //Dispose - funkcja usuwajaca
  70. procedure Usun(k:integer);
  71. var
  72. toDel: ptr;
  73. prev: ptr;
  74. begin
  75. if first <> nil then
  76. begin
  77. if first^.key = k then
  78. begin
  79. toDel:=first;
  80. first:=first^.next;
  81. Dispose(toDel);
  82. end
  83. else
  84. begin
  85. prev:=first;
  86. while (prev^.next <> nil) and (prev^.next.key <> k) do
  87. prev:=prev^.next;
  88. if prev^.next <> nil then
  89. begin
  90. toDel:=prev^.next;
  91. prev^.next:=toDel^.next;
  92. Dispose(toDel);
  93. end;
  94. end;
  95. end;
  96. end;
  97.  
  98. //zamiana elementu o kluczu k z kolejnym
  99. procedure zam (K:Integer);
  100. var
  101. t1, t2, prev: ptr;
  102. begin
  103. //jeśli element jest na początku listy
  104. if first^.key=k then
  105. begin
  106. t1:=first; //1 element
  107. t2:=first^.next; //adres następnika 1 elementu
  108. first:=t2; // adres first jest przypisany adresowi jego nastepnika (bez wartości)
  109. t1^.next:=t2^.next; // 1 element zostaje następnikiem t2 czyli następnikiem firsta (z wartością k)
  110. t2^.next:=t1;
  111. end
  112. else
  113. //jeśli element jest w środku listy
  114. begin
  115. prev:=first;
  116. while prev^.next^.key <> k do
  117. prev:=prev^.next;
  118. t1:=prev^.next; //t1 następnik od prev
  119. t2:=t1^.next; //t2 nastepnik od t1
  120. prev^.next:=t2; //następnikiem preva t2
  121. t1^.next:=t2^.next; //następnikiem t1 następnik t2
  122. t2^.next:=t1; //następnikiem t2 jest t1
  123. end;
  124. end;
  125.  
  126. //wyjęcie elementu z listy bez usuwania i zwrócenie jego adresu jako wynik
  127. function wyjmij(n:Integer):ptr;
  128. var
  129. t, prev: ptr;
  130. begin
  131. if first<>nil then //warunek zabezpieczający
  132. begin
  133. if n=1 then
  134. begin
  135. t:=first;
  136. first:=t^.next;
  137. result:=t;
  138. end
  139. else
  140. begin
  141. prev:=first;
  142. while n>2 do
  143. begin
  144. prev:=prev^.next;
  145. n:=n-1;
  146. end;
  147. t:=prev^.next;
  148. prev^.next:=t^.next;
  149. result:=t;
  150. end;
  151. end
  152. else
  153. begin
  154. prev:=first;
  155. while (n>2) and (prev^.next <> nil) do
  156. begin
  157. prev:=prev^.next;
  158. n:=n-1;
  159. end;
  160. if prev^.next <> nil then
  161. begin
  162. t:=prev^.next;
  163. prev^.next:=t^.next;
  164. result:=t;
  165. end;
  166. end;
  167.  
  168. end;
  169.  
  170. //zamiana elementu o indeksie n z n+1-szym
  171. procedure zamien(n:Integer); //zamienianie dla indeksu
  172. var
  173. t1, t2, prev: ptr;
  174. begin
  175. //jeśli element jest na początku listy
  176. if n=1 then
  177. begin
  178. t1:=first; //1 element
  179. t2:=first^.next; //adres następnika 1 elementu
  180. first:=t2; // adres first jest przypisany adresowi jego nastepnika (bez wartości)
  181. t1^.next:=t2^.next; // 1 element zostaje następnikiem t2 czyli następnikiem firsta (z wartością k)
  182. t2^.next:=t1;
  183. end
  184. else
  185. //jeśli element jest w środku listy
  186. begin
  187. prev:=first;
  188. while n>2 do
  189. begin
  190. prev:=prev^.next;
  191. n:=n-1;
  192. end;
  193. t1:=prev^.next; //t1 następnik od prev
  194. t2:=t1^.next; //t2 nastepnik od t1
  195. prev^.next:=t2; //następnikiem preva t2
  196. t1^.next:=t2^.next; //następnikiem t1 następnik t2
  197. t2^.next:=t1; //następnikiem t2 jest t1
  198. end;
  199. end;
  200.  
  201. //sortowanie bąblekowe listy
  202. procedure sort_b(n:Integer);
  203. var
  204. i,j:Integer;
  205. current:ptr;
  206. begin
  207. for i := 1 to n-1 do
  208. current:=first;
  209. begin
  210. for j := 1 to n-1 do
  211. begin
  212. if current^.key>current^.next^.key then
  213. zamien(j)
  214. else
  215. current:=current^.next;
  216. end;
  217.  
  218. end;
  219. end;
  220.  
  221. begin
  222.  
  223. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement