Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.42 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4.  
  5. //Przetestuj i porównaj czas wykonania metod dla różnych implementacji listy(skorzystaj ze Stopwatch).
  6. //Przetestuj Dodaj, Podaj, CzyZawiera, Usuń, (jeśli jest dopisane - zadania 1, 2 - Dodaj na i tej pozycji,
  7. //Dodaj na początku lub na końcu), PodajRozmiar.
  8. //Jako plik testowy można wykorzystać pliki z laboratorium 5 (100000 elementów).
  9. // Sformułuj wnioski.
  10.  
  11. // rekurencyjne struktury danych - lista jednokierunkowa
  12. // wersja obiektowa
  13. public class Węzeł
  14. {
  15. public int dane;// w węźle przechowujemy liczbę
  16. public Węzeł następny; // oraz referencję do następnego
  17. }
  18.  
  19. class ListaDowiazaniowa
  20. {
  21. Węzeł głowa = null;
  22.  
  23. public bool CzyPusta()
  24. {
  25. return głowa == null;
  26. }
  27.  
  28. // obliczamy rozmiar przechodząc przez wszystkie elementy listy
  29. // aż dojedziemy do nulla
  30. public int PodajRozmiar()
  31. {
  32. int licznik = 0;
  33. for (Węzeł tmp = głowa; tmp != null; tmp = tmp.następny)
  34. licznik++;
  35. return licznik;
  36. }
  37.  
  38. public void Dodaj(int liczba) //Do głowy
  39. {
  40. Węzeł tmp = new Węzeł(); // nowy węzeł
  41. tmp.dane = liczba;
  42. tmp.następny = głowa; //dotychczasowa głowa staje się "następny"
  43. głowa = tmp;// dodany element staje się głową
  44. }
  45.  
  46. public void Usuń() //Z głowy
  47. {
  48. if (głowa != null) // sprawdzamy, czy lista nie jest pusta
  49. głowa = głowa.następny;
  50. }
  51.  
  52. public int Podaj(int i) //i-ty element
  53. {
  54. int licznik = 0;
  55. for (Węzeł tmp = głowa; tmp != null; tmp = tmp.następny)
  56. if (licznik++ == i) return tmp.dane;
  57. throw new Exception("indeks poza zakresem!");
  58. }
  59.  
  60. public int CzyZawiera(int n) //element o wartości n
  61. {
  62. int licznik = 0;
  63. for (Węzeł tmp = głowa; tmp != null; tmp = tmp.następny, licznik++)
  64. {
  65. if (tmp.dane == n) return licznik;
  66. }
  67. return -1;
  68. }
  69.  
  70. // DOPISANA METODA
  71. public void Wstaw(int i, int n)
  72. {
  73. if (i==0)
  74. {
  75. Dodaj(n);
  76. return;
  77. }
  78. int licznik = 0;
  79. Węzeł w = new Węzeł();
  80. w.dane = n;
  81. for (Węzeł tmp = głowa; tmp != null; tmp = tmp.następny)
  82. if (licznik++ == i - 1)
  83. {
  84. w.następny = tmp.następny;
  85. tmp.następny = w;
  86. break;
  87. }
  88. }
  89.  
  90. ////////////////////////////////////////////////////////////////////////
  91.  
  92. // wyświetlanie
  93. public void Wyświetl()
  94. {
  95. for (Węzeł tmp = głowa; tmp != null; tmp = tmp.następny)
  96. Console.WriteLine(tmp.dane);
  97. Console.WriteLine();
  98. }
  99. }
  100.  
  101. // STAŁA POJEMNOŚC
  102. class ListaTablicowa
  103. {
  104. int[] dane = new int[pojemność];
  105. int rozmiar = 0;
  106. const int pojemność = 500000; // stała
  107.  
  108. public bool CzyPusta()
  109. {
  110. return rozmiar == 0;
  111. }
  112.  
  113. public int PodajRozmiar()
  114. {
  115. return rozmiar;
  116. }
  117.  
  118. public void Dodaj(int liczba) //na koniec
  119. {
  120. if (rozmiar == pojemność) throw new Exception("brak miejsca!");
  121. dane[rozmiar] = liczba;
  122. rozmiar++;
  123. }
  124.  
  125. public void Usuń() //z końca
  126. {
  127. if (rozmiar > 0) rozmiar--;
  128. }
  129.  
  130. public int Podaj(int i) //i-ty element
  131. {
  132. if (i >= 0 && i < rozmiar) return dane[i];
  133. throw new Exception("indeks poza zakresem!");
  134. }
  135.  
  136. public int CzyZawiera(int n) //element o wartości n
  137. {
  138. for (int i = 0; i < rozmiar; i++)
  139. {
  140. if (dane[i] == n) return i;
  141. }
  142. return -1;
  143. }
  144.  
  145. // NOWA METODA
  146. public void Wstaw(int i, int n)
  147. {
  148. for (int j = rozmiar; j > i; j--)
  149. {
  150. dane[j] = dane[j - 1];
  151. }
  152. dane[i] = n;
  153. rozmiar++;
  154. }
  155.  
  156. //łączy dwie listy "dokleja" do pierwszej drugą
  157. public void Dołącz(ListaTablicowa LB)
  158. {
  159. if (rozmiar + LB.rozmiar > pojemność) throw new Exception("brak miejsca!");
  160. for (int i = 0; i < LB.rozmiar; i++)
  161. dane[i + rozmiar] = LB.dane[i];
  162. rozmiar += LB.rozmiar;
  163. }
  164.  
  165.  
  166. ////////////////////////////////////////////////////////////////////////
  167.  
  168. // wyświetlanie
  169. public void Wyświetl()
  170. {
  171. for (int i = 0; i < rozmiar; i++)
  172. Console.WriteLine(dane[i]);
  173. Console.WriteLine();
  174. }
  175. }
  176. // Dynamicznie zmieniamy pojemność
  177. class ListaTablicowa2
  178. {
  179. int[] dane;
  180. int rozmiar = 0;
  181. //const int pojemność = 1000; // stała
  182. int pojemność = 1000; // startowa
  183.  
  184. public ListaTablicowa2()
  185. {
  186. dane = new int[pojemność];
  187. }
  188. public bool CzyPusta()
  189. {
  190. return rozmiar == 0;
  191. }
  192.  
  193. public int PodajRozmiar()
  194. {
  195. return rozmiar;
  196. }
  197.  
  198. public void Dodaj(int liczba) //na koniec
  199. {
  200. //if (rozmiar == pojemność) throw new Exception("brak miejsca!");
  201. if (rozmiar == pojemność)
  202. {
  203. pojemność = 2 * pojemność;
  204. int[] tmp = new int[pojemność];
  205. for (int i = 0; i < rozmiar; i++)
  206. tmp[i] = dane[i];
  207. dane = tmp;
  208. }
  209.  
  210. dane[rozmiar] = liczba;
  211. rozmiar++;
  212. }
  213.  
  214. public void Usuń() //z końca
  215. {
  216. if (rozmiar > 0) rozmiar--;
  217. }
  218.  
  219. public int Podaj(int i) //i-ty element
  220. {
  221. if (i >= 0 && i < rozmiar) return dane[i];
  222. throw new Exception("indeks poza zakresem!");
  223. }
  224.  
  225. public int CzyZawiera(int n) //element o wartości n
  226. {
  227. for (int i = 0; i < rozmiar; i++)
  228. {
  229. if (dane[i] == n) return i;
  230. }
  231. return -1;
  232. }
  233.  
  234. // NOWA METODA
  235. public void Wstaw(int i, int n)
  236. {
  237. if (rozmiar == pojemność)
  238. {
  239. pojemność = 2 * pojemność;
  240. int[] tmp = new int[pojemność];
  241. for (int j = 0; j < rozmiar; j++)
  242. tmp[j] = dane[j];
  243. dane = tmp;
  244. }
  245. for (int j = rozmiar; j > i; j--)
  246. {
  247. dane[j] = dane[j - 1];
  248. }
  249. dane[i] = n;
  250. rozmiar++;
  251. }
  252.  
  253. //łączy dwie listy "dokleja" do pierwszej drugą
  254. public void Dołącz(ListaTablicowa2 LB)
  255. {
  256. if (rozmiar + LB.rozmiar > pojemność) throw new Exception("brak miejsca!");
  257. for (int i = 0; i < LB.rozmiar; i++)
  258. dane[i + rozmiar] = LB.dane[i];
  259. rozmiar += LB.rozmiar;
  260. }
  261.  
  262.  
  263. ////////////////////////////////////////////////////////////////////////
  264.  
  265. // wyświetlanie
  266. public void Wyświetl()
  267. {
  268. for (int i = 0; i < rozmiar; i++)
  269. Console.WriteLine(dane[i]);
  270. Console.WriteLine();
  271. }
  272. }
  273.  
  274. class Program
  275. {
  276. static void Main(string[] args)
  277. {
  278. ListaDowiazaniowa ld0 = new ListaDowiazaniowa();
  279. ListaTablicowa lt0 = new ListaTablicowa();
  280. ListaTablicowa2 ltt0 = new ListaTablicowa2();
  281.  
  282. for (int i = 0; i < 5; i++) ld0.Dodaj(i);
  283. for (int i = 0; i < 5; i++) lt0.Dodaj(i);
  284. for (int i = 0; i < 5; i++) ltt0.Dodaj(i);
  285. ld0.Wstaw(4, 99);
  286. lt0.Wstaw(4, 99);
  287. ltt0.Wstaw(4, 99);
  288. ld0.Wyświetl();
  289. lt0.Wyświetl();
  290. ltt0.Wyświetl();
  291.  
  292. Console.WriteLine("TERAZ TESTY");
  293. Stopwatch sw = new Stopwatch();
  294.  
  295. for (int m = 100000; m <= 400000; m += 100000)
  296. {
  297. Console.WriteLine(m + " elementów");
  298.  
  299. ListaDowiazaniowa ld = new ListaDowiazaniowa();
  300. ListaTablicowa lt = new ListaTablicowa();
  301. ListaTablicowa2 ltt = new ListaTablicowa2();
  302.  
  303. sw.Reset();
  304. sw.Start();
  305. for (int i = 0; i < m; i++) ld.Dodaj(i);
  306. sw.Stop();
  307. Console.WriteLine("dowiazaniowa Dodaj {0}", sw.ElapsedTicks);
  308.  
  309. sw.Reset();
  310. sw.Start();
  311. for (int i = 0; i < m; i++) lt.Dodaj(i);
  312. sw.Stop();
  313. Console.WriteLine("tablicowa Dodaj {0}", sw.ElapsedTicks);
  314.  
  315. sw.Reset();
  316. sw.Start();
  317. for (int i = 0; i < m; i++) ltt.Dodaj(i);
  318. sw.Stop();
  319. Console.WriteLine("tablicowa2 Dodaj {0}", sw.ElapsedTicks);
  320.  
  321. sw.Reset();
  322. sw.Start();
  323. for (int i = 0; i < m; i += 100) ld.Podaj(i);
  324. sw.Stop();
  325. Console.WriteLine("dowiazaniowa Podaj {0}", sw.ElapsedTicks);
  326.  
  327. sw.Reset();
  328. sw.Start();
  329. for (int i = 0; i < m; i += 100) lt.Podaj(i);
  330. sw.Stop();
  331. Console.WriteLine("tablicowa Podaj {0}", sw.ElapsedTicks);
  332.  
  333. sw.Reset();
  334. sw.Start();
  335. for (int i = 0; i < m; i += 100) ltt.Podaj(i);
  336. sw.Stop();
  337. Console.WriteLine("tablicowa2 Podaj {0}", sw.ElapsedTicks);
  338.  
  339. sw.Reset();
  340. sw.Start();
  341. for (int i = 0; i < m; i += 10000) ld.CzyZawiera(i);
  342. sw.Stop();
  343. Console.WriteLine("dowiazaniowa CzyZawiera {0}", sw.ElapsedTicks);
  344.  
  345. sw.Reset();
  346. sw.Start();
  347. for (int i = 0; i < m; i += 10000) lt.CzyZawiera(i);
  348. sw.Stop();
  349. Console.WriteLine("tablicowa CzyZawiera {0}", sw.ElapsedTicks);
  350.  
  351. sw.Reset();
  352. sw.Start();
  353. for (int i = 0; i < m; i += 10000) ltt.CzyZawiera(i);
  354. sw.Stop();
  355. Console.WriteLine("tablicowa2 CzyZawiera {0}", sw.ElapsedTicks);
  356.  
  357. sw.Reset();
  358. sw.Start();
  359. for (int i = 0; i < m; i += 1000) ld.Wstaw(i, -10);
  360. sw.Stop();
  361. Console.WriteLine("dowiazaniowa Wstaw {0}", sw.ElapsedTicks);
  362.  
  363. sw.Reset();
  364. sw.Start();
  365. for (int i = 0; i < m; i += 1000) lt.Wstaw(i, -10);
  366. sw.Stop();
  367. Console.WriteLine("tablicowa Wstaw {0}", sw.ElapsedTicks);
  368.  
  369. sw.Reset();
  370. sw.Start();
  371. for (int i = 0; i < m; i += 1000) ltt.Wstaw(i, -10);
  372. sw.Stop();
  373. Console.WriteLine("tablicowa2 Wstaw {0}", sw.ElapsedTicks);
  374. Console.WriteLine(" ------------------------------ ");
  375. }
  376.  
  377. Console.WriteLine(" KONIEC ");
  378. Console.ReadKey();
  379. }
  380. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement