Advertisement
Guest User

Untitled

a guest
Dec 10th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.90 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. #include<string>
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. #include<assert.h>
  7.  
  8. struct Lista // struktura reprezentujaca pojedyncza wizytowke
  9. {
  10. string napis;
  11. Lista *nastepny; // wskaznik na nastepny element na liscie
  12.  
  13. Lista() // konstruktor - wywolywany przy tworzeniu obiektu
  14. {
  15. // wczytujemy dane
  16. cout << "Podaj napis: ";
  17. cin >> napis;
  18.  
  19. nastepny = NULL;
  20. }
  21.  
  22. void wypisz()
  23. {
  24. cout << napis << endl;
  25. }
  26. };
  27.  
  28. void dodaj_napis(Lista **korzen)
  29. {
  30. Lista *nowa = new Lista; // utworzenie nowej wizytowki
  31. Lista *pomoc = (*korzen), *pomoc1 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
  32.  
  33. while (pomoc != NULL && (pomoc->napis).compare(nowa->napis) == -1) // dopoki nie wyszlismy za liste i nazwisko na liscie jest przed nowym nazwiskiem poruszamy sie dalej
  34. {
  35. pomoc1 = pomoc; // pomoc1 zawsze wskazuje poprzednika pomoc
  36. pomoc = pomoc->nastepny;
  37. }
  38.  
  39. if (pomoc != NULL && (pomoc->napis).compare(nowa->napis) == 0) // wizytowka z podanym nazwiskiem juz istanieje
  40. {
  41. cout << "napis " << nowa->napis << " juz istanieje na liscie\n";
  42. delete nowa; // usuniecie obiektu
  43. }
  44. else if ((*korzen) == NULL || (pomoc == (*korzen) && (pomoc->napis).compare(nowa->napis) == 1)) // nowy element bedzie korzeniem listy
  45. {
  46. nowa->nastepny = (*korzen);
  47. (*korzen) = nowa;
  48. }
  49. else // dodajemy wizytowke w srodku lub na koncu listy
  50. {
  51. pomoc1->nastepny = nowa;
  52. nowa->nastepny = pomoc;
  53. }
  54. }
  55.  
  56. void skasuj_liste(Lista **korzen){
  57. Lista *pomoc = *korzen, *pomoc1 = pomoc->nastepny;
  58. while(pomoc != NULL){
  59. pomoc1 = pomoc->nastepny;
  60. free(pomoc);
  61. pomoc = pomoc->nastepny;
  62. }
  63. *korzen = NULL;
  64. }
  65.  
  66. void wyszukaj_napis(Lista *korzen, string a)
  67. {
  68. while(korzen != NULL && (korzen->napis).compare(a) != 0) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
  69. korzen = korzen->nastepny;
  70.  
  71. if (korzen == NULL)
  72. cout << "Nie ma napisu " << a << endl;
  73. else
  74. korzen->wypisz();
  75. }
  76.  
  77. void wypisz_wizytownik(Lista *korzen)
  78. {
  79. cout << "Zawartosc listy:\n";
  80.  
  81. while(korzen != NULL)
  82. {
  83. korzen->wypisz(); // wypisanie wizytowki
  84. korzen = korzen->nastepny; // przejscie na kolejny element
  85. }
  86. }
  87.  
  88. bool usun_napis(Lista **korzen, string a)
  89. {
  90. if ((*korzen) == NULL) // lista jest pusta
  91. return false;
  92. Lista *pomoc = (*korzen), *pomoc1 = NULL; // wskazniki pomocnicze posluza do poruszania sie po liscie
  93.  
  94. while(pomoc != NULL && (pomoc->napis).compare(a) != 0) // dopoki nie znajdziemy wizytowki z podanym nazwiskiem lub nie przeszukamy calego wizytownika
  95. {
  96. pomoc1 = pomoc;
  97. pomoc = pomoc->nastepny;
  98. }
  99.  
  100. if (pomoc == NULL) // wyszlismy za liste - nie ma takiego nazwiska na liscie
  101. return false;
  102. else if (pomoc == (*korzen)) // usuwamy koniec
  103. {
  104. (*korzen) = (*korzen)->nastepny;
  105. delete pomoc;
  106. }
  107. else // usuwamy z srodka lub konca listy
  108. {
  109. pomoc1->nastepny = pomoc->nastepny;
  110. delete pomoc;
  111. }
  112. return true;
  113. }
  114.  
  115. int main()
  116. {
  117. char instrukcja;
  118. string napis;
  119. Lista *korzen = NULL; // korzen listy - wskaznik na pierwszy element
  120. cout << "MENU - mozliwe operacje na wizytowniku\n"
  121. << "d - dodanie wizytowki\n"
  122. << "s - wyszukanie wizytowki\n"
  123. << "w - wypisanie wszystkich wizytowek\n"
  124. << "u - usuniecie wizytowki\n"
  125. << "Ctrl+Z - koniec programu\n";
  126.  
  127. while (cin >> instrukcja)
  128. {
  129. switch (instrukcja)
  130. {
  131. case 'd':
  132. dodaj_napis(&korzen);
  133. break;
  134. case 's':
  135. cout << "Podaj napis: ";
  136. cin >> napis;
  137. wyszukaj_napis(korzen, napis);
  138. break;
  139. case 'w':
  140. wypisz_wizytownik(korzen);
  141. break;
  142. case 'u':
  143. cout << "Podaj napis: ";
  144. cin >> napis;
  145. if (!usun_napis(&korzen, napis))
  146. cout << "Nie odnaleziono wizytowki z podanym nazwiskiem" << endl;
  147. else
  148. cout << "Wizytowka z podanym nazwiskiem zostala usunieta" << endl;
  149. break;
  150. case 'b':
  151. skasuj_liste(&korzen);break;
  152. default:
  153. cout << "Musisz wybrac jedna z opcji: d - dodawanie, s - wyszukiwanie, w - wypisanie zawartosci lub u - usuwanie\n";
  154. break;
  155. }
  156. }
  157.  
  158. return 0;
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement