Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. struct osoba {
  7. string imie;
  8. string nazwisko;
  9. int wiek;
  10. osoba *nastepna; // wskaźnik na następny element
  11. osoba(); // konstruktor
  12. };
  13.  
  14. osoba::osoba() {
  15. nastepna = 0; // konstruktor
  16. }
  17.  
  18. struct lista {
  19. osoba *pierwsza; // wskaźnik na początek listy
  20. void dodaj_osobe(string imie, string nazwisko, int wiek);
  21. void usun_osobe(int nr);
  22. void wyswietl_liste();
  23. lista();
  24. };
  25.  
  26. lista::lista() {
  27. pierwsza = 0; // konstruktor
  28. }
  29.  
  30. void lista::dodaj_osobe(string imie, string nazwisko, int wiek)
  31. {
  32. osoba *nowa = new osoba; // tworzy nowy element listy
  33.  
  34. // wypełniamy naszymi danymi
  35. nowa->imie = imie;
  36. nowa->nazwisko = nazwisko;
  37. nowa->wiek = wiek;
  38.  
  39. if (pierwsza == 0) // sprawdzamy czy to pierwszy element listy
  40. {
  41. // jeżeli tak to nowy element jest teraz początkiem listy
  42. pierwsza = nowa;
  43. }
  44.  
  45. else
  46. {
  47. // w przeciwnym wypadku wędrujemy na koniec listy
  48. osoba *temp = pierwsza;
  49.  
  50. while (temp->nastepna)
  51. {
  52. // znajdujemy wskaźnik na ostatni element
  53. temp = temp->nastepna;
  54. }
  55.  
  56. temp->nastepna = nowa; // ostatni element wskazuje na nasz nowy
  57. nowa->nastepna = 0; // ostatni nie wskazuje na nic
  58. }
  59. }
  60.  
  61. void lista::wyswietl_liste()
  62. {
  63. // wskaznik na pierszy element listy
  64. osoba *temp = pierwsza;
  65.  
  66. // przewijamy wskazniki na nastepne elementy
  67. while (temp)
  68. {
  69. cout << "imie: " << temp->imie << " nazwisko: " << temp->nazwisko<<" wiek: "<<temp->wiek << endl;
  70. temp = temp->nastepna;
  71. }
  72. }
  73.  
  74. void lista::usun_osobe(int nr)
  75. {
  76. // jezeli to pierwszy element listy
  77. if (nr == 1)
  78. {
  79. osoba *temp = pierwsza;
  80. pierwsza = temp->nastepna; //poczatek listy, 1 el. wskazuje na 2 el. itd..
  81. }
  82.  
  83. // jeżeli nie jest to pierwszy element
  84. if (nr >= 2)
  85. {
  86. int j = 1;
  87.  
  88. // do usuniecia srodkowego elemetnu potrzebujemy wskaznika na osobe n-1
  89. // wskaznik *temp bedzie wskaznikiem na osobe poprzedzajaca osobe usuwana
  90. osoba *temp = pierwsza;
  91.  
  92. while (temp)
  93. {
  94. // sprawdzamy czy wskaznik jest na osobie n-1 niz usuwana
  95. if ((j + 1) == nr) break;
  96.  
  97. // jezeli nie to przewijamy petle do przodu
  98. temp = temp->nastepna;
  99. j++;
  100. }
  101.  
  102. // wskaznik *temp wskazuje teraz na osobe n-1
  103. // nadpisujemy wkaznik osoby n na osobe n+1
  104. // bezpowrotnie tracimy osobe n-ta
  105.  
  106. // dodatkowo sprawdzamy czy aby nie jest to ostatni element
  107. // wtedy nalezy wyzerowac ostatni wskaznik
  108. if (temp->nastepna->nastepna == 0)
  109. temp->nastepna = 0;
  110.  
  111. // jezeli nie byl to ostatni element
  112. else
  113. temp->nastepna = temp->nastepna->nastepna;
  114. }
  115. }
  116.  
  117. int main()
  118. {
  119. lista *baza = new lista; //tworzymy liste
  120.  
  121. //dodajemy rekordy do bazy
  122. baza->dodaj_osobe("maciej", "pierwszy", 23);
  123. baza->dodaj_osobe("arkadiusz", "drugi", 44);
  124. baza->dodaj_osobe("dariusz", "trzeci", 19);
  125. baza->dodaj_osobe("andrzej", "czwarty", 21);
  126.  
  127. // wyswietlamy 1 osobę - macieja
  128. cout << baza->pierwsza->imie << endl;
  129.  
  130. // wyswietlamy 2 osobę - arkadiusza
  131. cout << baza->pierwsza->nastepna->imie << endl;
  132.  
  133. // wyswietlamy wiek 3 osoby - dariusza
  134. cout << baza->pierwsza->nastepna->nastepna->wiek << endl;
  135.  
  136. // wyswietlamy wiek 4 osoby - andrzeja
  137. cout << baza->pierwsza->nastepna->nastepna->nastepna->wiek << endl;
  138. baza->wyswietl_liste();
  139. baza->usun_osobe(2);
  140. baza->wyswietl_liste();
  141. delete (baza);
  142. system("PAUSE");
  143. return 0;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement