Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef __CHUSTECZKA_H__
- #define __CHUSTECZKA_H__
- #include "Osoba.h"
- #include "iostream"
- using namespace std;
- struct czlowiek
- {
- struct Osoba* plec;
- bool czyma;
- struct czlowiek* prawo;
- struct czlowiek* lewo;
- unsigned int identyfikator;
- };
- class Chusteczka
- {
- public:
- Chusteczka();
- ~Chusteczka();
- unsigned int dolacz(Osoba* osoba);
- unsigned int dolacz(Osoba* osoba, unsigned int odwlodka);
- bool rozpocznij();
- bool zakoncz();
- bool zrezygnuj(Osoba* osoba);
- bool zrezygnuj(unsigned int osoba);
- bool przekaz(Osoba* osoba);
- bool przekaz(unsigned int osoba);
- void uczestnicy();
- void uczestnicy(Osoba::Plec p);
- unsigned int ilosc();
- void statystyka();
- private:
- struct czlowiek* wlodzirej;
- struct czlowiek* ktoma;
- struct czlowiek* pierwszy;
- struct czlowiek* ostatni;
- unsigned int ileosob;
- unsigned int ostatniid;
- bool czyrozpoczeta;
- char plec(Osoba::Plec p);
- };
- Chusteczka::Chusteczka()
- {
- wlodzirej = new struct czlowiek;
- wlodzirej->plec = new Osoba(Osoba::K);
- wlodzirej->prawo = wlodzirej;
- wlodzirej->lewo = wlodzirej;
- wlodzirej->czyma = 1;
- wlodzirej->identyfikator = 0;
- ostatniid = 0;
- ktoma = wlodzirej;
- pierwszy = wlodzirej;
- ostatni = wlodzirej;
- czyrozpoczeta = 0;
- ileosob=0;
- }
- Chusteczka::~Chusteczka()
- {
- }
- unsigned int Chusteczka::dolacz(Osoba* osoba)
- {
- struct czlowiek* wsk=pierwszy->prawo;
- if(osoba==0)
- return 0;
- for(;wsk!=wlodzirej;wsk=wsk->prawo)
- {
- if(osoba==wsk->plec)
- return 0;
- }
- wsk = new struct czlowiek;
- ostatni->prawo = wsk;
- wsk->lewo=ostatni;
- wsk->prawo=wlodzirej;
- wlodzirej->lewo=wsk;
- wsk->identyfikator=++ostatniid;
- wsk->czyma = 0;
- wsk->plec = osoba;
- ileosob++;
- ostatni = wsk;
- return wsk->identyfikator;
- }
- unsigned int Chusteczka::dolacz(Osoba* osoba, unsigned int odwlodka)
- {
- if(odwlodka<=ileosob)
- {
- struct czlowiek* wsk=pierwszy->prawo;
- if(osoba==0)
- return 0;
- for(;wsk!=wlodzirej;wsk=wsk->prawo)
- {
- if(osoba==wsk->plec)
- return 0;
- }
- wsk=pierwszy;
- unsigned int iodwlodka = 0;
- if(wsk->prawo!=0)
- while(iodwlodka!=odwlodka)
- {
- iodwlodka++;
- wsk=wsk->prawo;
- }
- struct czlowiek* temp = wsk;
- wsk = new struct czlowiek;
- wsk->prawo = temp->prawo;
- temp->prawo = wsk;
- wsk->lewo = temp;
- temp = wsk->prawo;
- temp->lewo = wsk;
- wsk->identyfikator=++ostatniid;
- wsk->czyma = 0;
- wsk->plec = osoba;
- ileosob++;
- return wsk->identyfikator;
- }
- return 0;
- }
- bool Chusteczka::rozpocznij()
- {
- if(czyrozpoczeta==1)
- return 0;
- if(ileosob==0)
- return 0;
- ktoma = wlodzirej;
- czyrozpoczeta = 1;
- return 1;
- }
- bool Chusteczka::zakoncz()
- {
- if(czyrozpoczeta==0)
- return 0;
- ktoma->czyma=0;
- ktoma = wlodzirej;
- wlodzirej->czyma=1;
- czyrozpoczeta = 0;
- return 1;
- }
- bool Chusteczka::zrezygnuj(Osoba* osoba)
- {
- struct czlowiek* wsk=pierwszy;
- if(osoba==0)
- return 0;
- if(wsk->prawo!=0)
- while(wsk!=wlodzirej)
- {
- if(osoba==wsk->plec)
- {
- if(wsk->czyma==1)
- return 0;
- struct czlowiek *temp;
- temp = wsk->prawo;
- temp->lewo = wsk->lewo;
- temp = wsk->lewo;
- temp->prawo = wsk->prawo;
- ileosob--;
- delete wsk;
- return 1;
- }
- wsk=wsk->prawo;
- }
- return 0;
- }
- bool Chusteczka::zrezygnuj(unsigned int osoba)
- {
- if(osoba == 0)
- return 0;
- struct czlowiek *wsk=pierwszy;
- for(;wsk!=ostatni;wsk=wsk->prawo)
- {
- if(osoba==wsk->identyfikator)
- {
- if(wsk->czyma==1)
- return 0;
- struct czlowiek *temp;
- temp = wsk->prawo;
- temp->lewo = wsk->lewo;
- temp = wsk->lewo;
- temp->prawo = wsk->prawo;
- ileosob--;
- delete wsk;
- return 1;
- }
- }
- return 0;
- }
- bool Chusteczka::przekaz(Osoba* osoba)
- {
- if(czyrozpoczeta==0)
- return 0;
- struct czlowiek *wsk=pierwszy->prawo;
- for(;wsk!=wlodzirej;wsk=wsk->prawo)
- {
- if(osoba==wsk->plec)
- if(wsk->plec->plec==osoba->plec)
- {
- if(ktoma!=wlodzirej)
- {
- return 0;
- }
- else
- {
- wsk->czyma = 1;
- ktoma->czyma = 0;
- ktoma = wsk;
- return 1;
- }
- }
- else
- {
- wsk->czyma = 1;
- ktoma->czyma = 0;
- ktoma = wsk;
- return 1;
- }
- }
- return 0;
- }
- bool Chusteczka::przekaz(unsigned int osoba)
- {
- struct czlowiek *wsk=wlodzirej->prawo;
- if(czyrozpoczeta==0)
- return 0;
- if(osoba == 0)
- return 0;
- for(;wsk!=wlodzirej;wsk=wsk->prawo)
- {
- if(osoba==wsk->identyfikator)
- if(wsk->plec->plec==ktoma->plec->plec)
- {
- if(ktoma!=wlodzirej)
- {
- return 0;
- }
- else
- {
- wsk->czyma = 1;
- ktoma->czyma = 0;
- ktoma = wsk;
- return 1;
- }
- }
- else
- {
- wsk->czyma = 1;
- ktoma->czyma = 0;
- ktoma = wsk;
- return 1;
- }
- }
- return 0;
- }
- char Chusteczka::plec(Osoba::Plec p)
- {
- if(p==0)
- return 'K';
- else
- return 'M';
- }
- void Chusteczka::uczestnicy()
- {
- struct czlowiek* wsk = wlodzirej->lewo;
- while(wsk->lewo!=wlodzirej)
- {
- std::cout << "plec: " << wsk->plec->plec;
- std::cout << ", nr: " << wsk->identyfikator << std::endl;
- wsk=wsk->lewo;
- }
- std::cout << "plec: " << wsk->plec->plec;
- std::cout << ", nr: " << wsk->identyfikator << std::endl;
- }
- void Chusteczka::uczestnicy(Osoba::Plec p)
- {
- struct czlowiek* wsk = wlodzirej->lewo;
- while(wsk->lewo!=wlodzirej)
- {
- if(wsk->plec->plec==p)
- std::cout << "nr: " << wsk->identyfikator << std::endl;
- wsk=wsk->lewo;
- }
- if(wsk->plec->plec==p)
- std::cout << "nr: " << wsk->identyfikator << std::endl;
- }
- unsigned int Chusteczka::ilosc()
- {
- return ileosob;
- }
- void Chusteczka::statystyka()
- {
- cout << "Ile: " << ileosob << endl;
- cout << "Ktoma: " << ktoma->identyfikator << endl;
- struct czlowiek *wsk=pierwszy;
- cout << "i h l p P\n";
- cout << wsk->identyfikator << " ";
- cout << wsk->czyma << " ";
- cout << (wsk->lewo)->identyfikator << " ";
- cout << (wsk->prawo)->identyfikator << " ";
- cout << plec(wsk->plec->plec)<< endl;
- wsk=pierwszy->prawo;
- for(;wsk!=wlodzirej;wsk=wsk->prawo)
- {
- cout << wsk->identyfikator << " ";
- cout << wsk->czyma << " ";
- cout << (wsk->lewo)->identyfikator << " ";
- cout << (wsk->prawo)->identyfikator << " ";
- cout << plec(wsk->plec->plec)<< endl;
- }
- }
- #endif
Add Comment
Please, Sign In to add comment