Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.57 KB | None | 0 0
  1. // lista.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <ctime>
  7. #include <fstream>
  8.  
  9. using namespace std;
  10.  
  11. //wezel listy
  12. struct Wezel {
  13. int klucz;
  14. double liczba;
  15. char znak;
  16. Wezel *poprzednik;
  17. Wezel *nastepnik;
  18. };
  19.  
  20. //Lista dwukierunkowa cykliczna
  21. struct Lista {
  22. Wezel *poczatek;
  23. int ilosc;
  24. };
  25. //tworzenie listy
  26. void tworzenie_listy(Lista *lista) {
  27. lista->poczatek = NULL;
  28. lista->ilosc = 0;
  29. }
  30. //wypisywanie od poczatku
  31. void od_poczatku(Lista *lista, int ilosc) {
  32.  
  33. if (lista->poczatek == NULL)
  34. return;
  35.  
  36. Wezel *pomocniczy = lista->poczatek;
  37. cout << "Elementy od poczatku listy : " << endl;
  38.  
  39. while (pomocniczy != NULL && ilosc > 0) {
  40. cout << pomocniczy->klucz << endl;
  41. pomocniczy = pomocniczy->nastepnik;
  42. ilosc--;
  43. }
  44. }
  45. //wypisywanie od konca
  46. void od_konca(Lista *lista, int ilosc) {
  47.  
  48. if (lista->poczatek == NULL)
  49. return;
  50.  
  51. Wezel *pomocniczy = lista->poczatek;
  52. cout << "Elementy od konca listy : " << endl;
  53.  
  54. while (pomocniczy != NULL && ilosc > 0) {
  55. pomocniczy = pomocniczy->poprzednik;
  56. cout << pomocniczy->klucz << endl;
  57. ilosc--;
  58. }
  59. }
  60.  
  61. //ilosc
  62. void ilosc_elementow(Lista *lista) {
  63. cout << "Ilosc elementow : " << lista->ilosc << endl;
  64. }
  65.  
  66. //szukanie elementu o podanym kluczu
  67. Wezel *szukanie_klucza(Lista *lista, int klucz) {
  68.  
  69. if (lista->poczatek == NULL)
  70. return NULL;
  71.  
  72. Wezel *pomocniczy = lista->poczatek;
  73. for(int i=0; i<lista->ilosc;i++)
  74. {
  75. if (pomocniczy->klucz == klucz)
  76. {
  77. return pomocniczy;
  78. }
  79. pomocniczy = pomocniczy->nastepnik;
  80. }
  81. return NULL;
  82. }
  83. //szukanie wezla przed ktorym mamy wstawic
  84. Wezel *szukanie_nas_elementu(Lista *lista, int klucz)
  85. {
  86. if (lista->poczatek == NULL)
  87. {
  88. return NULL;
  89. }
  90.  
  91. Wezel *pomocniczy = lista->poczatek;
  92.  
  93. for (int i = 0; i < lista->ilosc; i++)
  94. {
  95. if (pomocniczy->klucz >= klucz)
  96. {
  97. return pomocniczy;
  98. }
  99. pomocniczy = pomocniczy->nastepnik;
  100. }
  101. return lista->poczatek;
  102. }
  103.  
  104. // wstawia kolejny klucz na listę
  105. bool wstaw(Lista *lista, int klucz, double liczba, char znak)
  106. {
  107. if (szukanie_klucza(lista, klucz) != NULL)
  108. {
  109. return false;
  110. }
  111.  
  112. Wezel *nastepnyWezel = szukanie_nas_elementu(lista, klucz);
  113. Wezel *aktualnyWezel = new Wezel();
  114. aktualnyWezel->klucz = klucz;
  115. aktualnyWezel->liczba = liczba;
  116. aktualnyWezel->znak = znak;
  117. aktualnyWezel->nastepnik = NULL;
  118. aktualnyWezel->poprzednik = NULL;
  119.  
  120. // lista jest pusta
  121. if (lista->ilosc == 0)
  122. {
  123. aktualnyWezel->nastepnik = aktualnyWezel;
  124. aktualnyWezel->poprzednik = aktualnyWezel;
  125. lista->poczatek = aktualnyWezel;
  126. }
  127. // lista ma przynajmniej 1 element
  128. else
  129. {
  130. aktualnyWezel->nastepnik = nastepnyWezel;
  131. aktualnyWezel->poprzednik = nastepnyWezel->poprzednik;
  132. nastepnyWezel->poprzednik->nastepnik = aktualnyWezel;
  133. nastepnyWezel->poprzednik = aktualnyWezel;
  134. }
  135.  
  136. // jeżeli wstawiany klucz jest mniejszy od klucza korzenia
  137. if (lista->poczatek->klucz > klucz)
  138. // zastąp korzeń kluczem wstawianym
  139. lista->poczatek = aktualnyWezel;
  140.  
  141. lista->ilosc++;
  142.  
  143. return true;
  144. }
  145.  
  146.  
  147. //wstawianie losowego wezla
  148. void wstaw_losowo(Lista *lista, int iloscWezlow)
  149. {
  150. // inicjalizuj generator losowy aktualnym czasem
  151. srand(time(NULL));
  152.  
  153. while (iloscWezlow-- > 0)
  154. {
  155. int klucz = (99 + (rand() % (999999 - 99 + 1)));
  156. double liczba = (0 + (rand() % (100 - 0 + 1)));
  157. char znak = (97 + (rand() % (122 - 97 + 1)));
  158.  
  159. wstaw(lista, klucz, liczba, znak);
  160. }
  161. }
  162.  
  163. bool usuwanie_wez(Lista *lista, int klucz) {
  164.  
  165. Wezel *aktualnyWezel = szukanie_klucza(lista, klucz);
  166.  
  167. if (aktualnyWezel == NULL)
  168. return false;
  169.  
  170. aktualnyWezel->poprzednik->nastepnik = aktualnyWezel->nastepnik;
  171. aktualnyWezel->nastepnik->poprzednik = aktualnyWezel->poprzednik;
  172. if (lista->poczatek == aktualnyWezel)
  173. lista->poczatek = lista->poczatek->nastepnik;
  174.  
  175. delete aktualnyWezel;
  176. lista->ilosc--;
  177.  
  178. return true;
  179. }
  180.  
  181. void usuwanie_lista(Lista *lista) {
  182.  
  183. Wezel *pomocniczy = lista->poczatek;
  184.  
  185. for (int klucz = 0;klucz < lista->ilosc;klucz++) {
  186.  
  187. Wezel *usuwany = pomocniczy;
  188. pomocniczy = pomocniczy->nastepnik;
  189. delete usuwany;
  190. }
  191.  
  192. tworzenie_listy(lista);
  193.  
  194. }
  195.  
  196.  
  197. int main() {
  198.  
  199. // star pomiar czasu
  200. clock_t begin, end;
  201. double time;
  202. begin = clock();
  203.  
  204.  
  205. ifstream plik;
  206. plik.open("inlab02.txt");
  207. if (plik.good())
  208. cout << "Masz dostep do pliku." << endl;
  209. else
  210. cout << "nie masz dostep do pliku." << endl;
  211.  
  212. int X, k1, k2, k3, k4, k5;
  213.  
  214. // wczytaj dane z pliku
  215. plik >> X >> k1 >> k2 >> k3 >> k4 >> k5;
  216. plik.close();
  217.  
  218. Lista lista;
  219. tworzenie_listy(&lista);
  220.  
  221. Wezel *pomocniczy = szukanie_klucza(&lista, k1);
  222.  
  223. if (pomocniczy != NULL)
  224. cout << "znaleziono " << k1 << endl;
  225. else
  226. cout << "nie znaleziono " << k1 << endl;
  227.  
  228. wstaw_losowo(&lista, X);
  229. ilosc_elementow(&lista);
  230. od_poczatku(&lista, 20);
  231. wstaw(&lista, k2, 0, 'T');
  232. od_poczatku(&lista, 20);
  233. wstaw(&lista, k3, 0, 'T');
  234. od_poczatku(&lista, 20);
  235. wstaw(&lista, k4, 0, 'T');
  236. od_poczatku(&lista, 20);
  237. wstaw(&lista, k5, 0, 'T');
  238.  
  239. usuwanie_wez(&lista, k3);
  240. od_poczatku(&lista, 20);
  241. usuwanie_wez(&lista, k2);
  242. od_poczatku(&lista, 20);
  243. usuwanie_wez(&lista, k5);
  244. ilosc_elementow(&lista);
  245. pomocniczy = szukanie_klucza(&lista, k5);
  246. if (pomocniczy != NULL)
  247. cout << "znaleziono " << k5 << endl;
  248. else
  249. cout << "nie znaleziono " << k5 << endl;
  250.  
  251. od_konca(&lista, 11);
  252. usuwanie_lista(&lista);
  253. od_konca(&lista, 11);
  254. ilosc_elementow(&lista);
  255.  
  256. end = clock();
  257. time = (double)(end - begin) / CLOCKS_PER_SEC;
  258. cout << "Koniec.Czas wykonaniu programu : " << time << endl;
  259.  
  260. system("pause");
  261. return 0;
  262. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement