- Forum grupy T2 I Roku EiT http://www.t2.pun.pl/index.php - Nasze Programy C++ http://www.t2.pun.pl/viewforum.php?id=13 - Podobno zaliczenie http://www.t2.pun.pl/viewtopic.php?id=110 |
Mateusz Buczkowski - 2008-05-26 16:24:40 |
Doszły mnie słuchy, że to miała jakaś grupa na zaliczeniu. Ktoś chciał, żebym zrobił i wrzucił to zrobiłem i wrzucam ;P Kod:/* lista w formie kolejki użytkownik podaje maksymalny rozmiar kolejki w elementach listy(klientach) jest jeden prywatny element mówiący ile ma zakupów(liczba int) oraz wskaźnik lub wskaźniki klasa tworząca liste zawiera prywatne elementy: int - max rozmiar kolejki int - aktualna liczba klientów w kolejce zawiera też 3 metody: 1. dodawanie do końca kolejki 2. usuwanie z początku kolejki 3. wyśliwtlanie liczby klinetów */ #include <iostream> #include <conio.h> using namespace std; class link { private: int zakupy; // ilosc zakupow danego klienta link* next; public: link(); link(int, link*); // konstruktory itp itd ~link(); friend class list; }; link :: link() { zakupy = 0; next = NULL; } link :: link(int new_zakupy, link* new_next = NULL) : zakupy(new_zakupy), next(new_next) { } link :: ~link() { next = NULL; } class list { private: int max; // maksymalna dozwolona ilosc klientow w kolejce int klienci; // aktualna ilosc klientow link *head; // wskaznik na pierwszy el. public: list(); ~list(); void set_max(int); // ustawienie maxa przez usera void add_last(int); // dodanie na koniec [jako parametr ilosc zakupow klienta] void remove_first(); // usuniecie void display(); // wyswietlenie }; list :: list() { head = NULL; klienci = 0; // gdy tworzymy kolejke nie ma klientow } list :: ~list() { link *temp; if (head) temp = head->next; // jesli jest pierwszy element, to zapamietujemy adres drugiego while (head) { delete head; // usuwamy pierwszy head = temp; // i na jego miejsce wstawiamy ten zapamietany temp = temp ->next; // i zapamietujemy nastepny } // i tak w kolko ;P } void list :: set_max(int m) { max = m; } void list :: add_last(int ilosc_zakupow) { if (klienci == max) // jesli kolejka jest pelna return; // wychodzimy, bo nie bedziemy stac przeciez tyle w kolejce :] ++klienci; // a jak nie wyjdziemy, to zwiekszamy licznik klientow w kolecje if (!head) // jesli nie ma nikogo w kolejce [takie rzeczy sie zdarzaja?:P] { head = new link(ilosc_zakupow); // dodajemy nowy element na poczatek return; // i wychodzimy } link *temp = head; // a jak mielismy pecha while (temp->next) temp = temp->next; // to idziemy od poczatku kolejki do konca, przesuwajac wskaznik temp temp->next = new link(ilosc_zakupow); // i tworzymy na koncu obiekt } void list :: remove_first() { if (!head) // jesli kolejka jest pusta return; // nic nie usuwamy i wychodzimy --klienci; // a jak ktos jest to zmniejszamy ilosc klientow i wywalamy jegomoscia link *temp = head->next; // zapamietujemy adres drugiego, ktory to zaraz stanie sie pierwszy delete head; // usuwamy pierwszego :] head = temp; // a na jego miejsce dajemy zapamietanego } void list :: display() { cout << klienci << endl; // wyswietlamy ilu jest klientow w kolejeczce if (!head) return; // jak nie ma nikogo to au revoir link *temp = head; while (temp) { cout << temp->zakupy << endl; // jak ktos jest to wyswietlamy jego zakupy :] temp = temp->next; // i przechodzimy na nastepnego } // az sprawdzimy wszystkich } int main() { int temp; list kolejka; // tworzymy kolejke cout << "Podaj maksymalna ilosc klientow: "; cin >> temp; kolejka.set_max(temp); // ustawiamy maksa w kolejce for(int i = 0; i < 5; i++) { cout << "podaj ilosc zakupow klienta: "; cin >> temp; kolejka.add_last(temp); // dodajemy paru interesantow } kolejka.display(); // wyswietlamy ich kolejka.remove_first(); kolejka.remove_first(); kolejka.remove_first(); // usuniecie wszystkich klientow :] kolejka.display(); kolejka.remove_first(); kolejka.remove_first(); getch(); return 0; // i po sprawie mam nadzieje ;] } EDIT: destruktor nieraz nawala ;P quest za 50exp'a [itemów nie będzie :P] - naprawić :D |