Advertisement
Guest User

xxxxx

a guest
Mar 26th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.87 KB | None | 0 0
  1. // ConsoleApplication1.cpp: Określa punkt wejścia dla aplikacji konsoli.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. struct osoba
  11. {
  12.     int numeralbumu;
  13.     string imie;
  14.     string nazwisko;
  15.     int rokstudiow;
  16.     string kierunek;
  17.     string specjalnosc;
  18.     osoba *nastepna;    // wskaznik na nastepny element
  19.     osoba();            // konstruktor
  20. };
  21.  
  22. osoba::osoba()
  23. {
  24.     nastepna = 0;       // konstruktor
  25. }
  26.  
  27. struct lista
  28. {
  29.     osoba *pierwsza;  // wskaznik na poczatek listy
  30.     void dodaj_osobe(int numeralbumu, string imie, string nazwisko, int rokstudiow, string kierunek, string specjalnosc);
  31.     void usun_osobe(int nr);
  32.     void wyswietl_liste();
  33.     lista();
  34. };
  35.  
  36.  
  37. lista::lista()
  38. {
  39.     pierwsza = 0;       // konstruktor
  40. }
  41.  
  42. void lista::wyswietl_liste()
  43. {
  44.     // wskaznik na pierszy element listy
  45.     osoba *temp = pierwsza;
  46.  
  47.     // przewijamy wskazniki na nastepne elementy
  48.     while (temp)
  49.     {
  50.         cout << "numeralbumu: " << temp->numeralbumu << " imie: " << temp->imie << " nazwisko: " << temp->nazwisko << " rok studiow: " << temp->rokstudiow;
  51.         cout << " kierunek : " << temp->kierunek << " specjalnosc: " << temp->specjalnosc << endl;
  52.         temp = temp->nastepna;
  53.     }
  54. }
  55.  
  56. void lista::usun_osobe(int nr)
  57. {
  58.     // jezeli to pierwszy element listy
  59.     if (nr == 1)
  60.     {
  61.         osoba *temp = pierwsza;
  62.         pierwsza = temp->nastepna; //poczatek listy, 1 element wskazuje na 2 element itd..
  63.     }
  64.  
  65.     // jezeli nie jest to pierwszy element
  66.     if (nr >= 2)
  67.     {
  68.         int j = 1;
  69.  
  70.         // do usuniecia srodkowego elemetnu potrzebujemy wskaznika na osobe n-1
  71.         // wskaznik *wsk bedzie wskaznikiem na osobe poprzedzajaca osobe usuwana
  72.         osoba *temp = pierwsza;
  73.  
  74.         while (temp)
  75.         {
  76.             // sprawdzamy czy wskaznik jest na osobie n-1 niz usuwana
  77.             if ((j + 1) == nr) break;
  78.  
  79.             // jezeli nie to przewijamy petle do przodu
  80.             temp = temp->nastepna;
  81.             j++;
  82.         }
  83.  
  84.         // wskaznik *temp wskazuje teraz na osobe n-1
  85.         // nadpisujemy wkaznik osoby n na osobe n+1
  86.         // bezpowrotnie tracimy osobe n-ta
  87.  
  88.         // dodatkowo sprawdzamy czy aby nie jest to ostatni element
  89.         // wtedy nalezy wyzerowac ostatni wskaznik
  90.         if (temp->nastepna->nastepna == 0)
  91.             temp->nastepna = 0;
  92.  
  93.         // jezeli nie byl to ostatni element
  94.         else
  95.             temp->nastepna = temp->nastepna->nastepna;
  96.     }
  97. }
  98.  
  99. void lista::dodaj_osobe(int numeralbumu, string imie, string nazwisko, int rokstudiow, string kierunek, string specjalnosc)
  100. {
  101.     osoba *nowa = new osoba;    // tworzy nowy element listy
  102.  
  103.                                 // wypelniamy naszymi danymi
  104.     nowa->numeralbumu = numeralbumu;
  105.     nowa->imie = imie;
  106.     nowa->nazwisko = nazwisko;
  107.     nowa->rokstudiow = rokstudiow;
  108.     nowa->kierunek = kierunek;
  109.     nowa->specjalnosc = specjalnosc;
  110.  
  111.     if (pierwsza == 0) // sprawdzamy czy to pierwszy element listy
  112.     {
  113.         // jezeli tak to nowy element jest teraz poczatkiem listy
  114.         pierwsza = nowa;
  115.     }
  116.  
  117.     else
  118.     {
  119.         // w przeciwnym wypadku wedrujemy na koniec listy
  120.         osoba *temp = pierwsza;
  121.  
  122.         while (temp->nastepna)
  123.         {
  124.             // znajdujemy wskaznik na ostatni element
  125.             temp = temp->nastepna;
  126.         }
  127.  
  128.         temp->nastepna = nowa;  // ostatni element wskazuje na nasz nowy
  129.         nowa->nastepna = 0;     // ostatni nie wskazuje na nic
  130.     }
  131. }
  132.  
  133. int main()
  134. {
  135.     lista *baza = new lista;    //tworzymy liste
  136.  
  137.                                 //dodajemy osoby do bazy
  138.     baza->dodaj_osobe(111, "Maciej", "Nowak", 2, "AiR", "specjalnosc");
  139.     baza->dodaj_osobe(222, "Arkadiusz", "Kon", 4, "INF", "specjalnosc");
  140.     baza->dodaj_osobe(333, "Dariusz", "Cieciorka", 1, "EKA", "specjalnosc");
  141.     baza->dodaj_osobe(444, "Andrzej", "Kos", 2, "AiR", "specjalnosc");
  142.     baza->dodaj_osobe(555, "Jozek", "Piatek", 5, "EKA", "specjalnosc");
  143.  
  144.     baza->wyswietl_liste();
  145.  
  146.     cout << "-----------" << endl;
  147.     int ktora;
  148.     cout << "Ktora osobe chcesz usunac?" << endl;
  149.     cin >> ktora;
  150.     baza->usun_osobe(ktora);
  151.  
  152.     baza->wyswietl_liste();
  153.     cout << "------------" << endl;
  154.    
  155.     delete (baza);
  156.  
  157.     system("pause >nul");
  158.  
  159.     return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement