Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication1.cpp: Określa punkt wejścia dla aplikacji konsoli.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- using namespace std;
- struct osoba
- {
- int numeralbumu;
- string imie;
- string nazwisko;
- int rokstudiow;
- string kierunek;
- string specjalnosc;
- osoba *nastepna; // wskaznik na nastepny element
- osoba(); // konstruktor
- };
- osoba::osoba()
- {
- nastepna = 0; // konstruktor
- }
- struct lista
- {
- osoba *pierwsza; // wskaznik na poczatek listy
- void dodaj_osobe(int numeralbumu, string imie, string nazwisko, int rokstudiow, string kierunek, string specjalnosc);
- void usun_osobe(int nr);
- void wyswietl_liste();
- lista();
- };
- lista::lista()
- {
- pierwsza = 0; // konstruktor
- }
- void lista::wyswietl_liste()
- {
- // wskaznik na pierszy element listy
- osoba *temp = pierwsza;
- // przewijamy wskazniki na nastepne elementy
- while (temp)
- {
- cout << "numeralbumu: " << temp->numeralbumu << " imie: " << temp->imie << " nazwisko: " << temp->nazwisko << " rok studiow: " << temp->rokstudiow;
- cout << " kierunek : " << temp->kierunek << " specjalnosc: " << temp->specjalnosc << endl;
- temp = temp->nastepna;
- }
- }
- void lista::usun_osobe(int nr)
- {
- // jezeli to pierwszy element listy
- if (nr == 1)
- {
- osoba *temp = pierwsza;
- pierwsza = temp->nastepna; //poczatek listy, 1 element wskazuje na 2 element itd..
- }
- // jezeli nie jest to pierwszy element
- if (nr >= 2)
- {
- int j = 1;
- // do usuniecia srodkowego elemetnu potrzebujemy wskaznika na osobe n-1
- // wskaznik *wsk bedzie wskaznikiem na osobe poprzedzajaca osobe usuwana
- osoba *temp = pierwsza;
- while (temp)
- {
- // sprawdzamy czy wskaznik jest na osobie n-1 niz usuwana
- if ((j + 1) == nr) break;
- // jezeli nie to przewijamy petle do przodu
- temp = temp->nastepna;
- j++;
- }
- // wskaznik *temp wskazuje teraz na osobe n-1
- // nadpisujemy wkaznik osoby n na osobe n+1
- // bezpowrotnie tracimy osobe n-ta
- // dodatkowo sprawdzamy czy aby nie jest to ostatni element
- // wtedy nalezy wyzerowac ostatni wskaznik
- if (temp->nastepna->nastepna == 0)
- temp->nastepna = 0;
- // jezeli nie byl to ostatni element
- else
- temp->nastepna = temp->nastepna->nastepna;
- }
- }
- void lista::dodaj_osobe(int numeralbumu, string imie, string nazwisko, int rokstudiow, string kierunek, string specjalnosc)
- {
- osoba *nowa = new osoba; // tworzy nowy element listy
- // wypelniamy naszymi danymi
- nowa->numeralbumu = numeralbumu;
- nowa->imie = imie;
- nowa->nazwisko = nazwisko;
- nowa->rokstudiow = rokstudiow;
- nowa->kierunek = kierunek;
- nowa->specjalnosc = specjalnosc;
- if (pierwsza == 0) // sprawdzamy czy to pierwszy element listy
- {
- // jezeli tak to nowy element jest teraz poczatkiem listy
- pierwsza = nowa;
- }
- else
- {
- // w przeciwnym wypadku wedrujemy na koniec listy
- osoba *temp = pierwsza;
- while (temp->nastepna)
- {
- // znajdujemy wskaznik na ostatni element
- temp = temp->nastepna;
- }
- temp->nastepna = nowa; // ostatni element wskazuje na nasz nowy
- nowa->nastepna = 0; // ostatni nie wskazuje na nic
- }
- }
- int main()
- {
- lista *baza = new lista; //tworzymy liste
- //dodajemy osoby do bazy
- baza->dodaj_osobe(111, "Maciej", "Nowak", 2, "AiR", "specjalnosc");
- baza->dodaj_osobe(222, "Arkadiusz", "Kon", 4, "INF", "specjalnosc");
- baza->dodaj_osobe(333, "Dariusz", "Cieciorka", 1, "EKA", "specjalnosc");
- baza->dodaj_osobe(444, "Andrzej", "Kos", 2, "AiR", "specjalnosc");
- baza->dodaj_osobe(555, "Jozek", "Piatek", 5, "EKA", "specjalnosc");
- baza->wyswietl_liste();
- cout << "-----------" << endl;
- int ktora;
- cout << "Ktora osobe chcesz usunac?" << endl;
- cin >> ktora;
- baza->usun_osobe(ktora);
- baza->wyswietl_liste();
- cout << "------------" << endl;
- delete (baza);
- system("pause >nul");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement