Advertisement
frentzy

Bilet nr 4

Apr 23rd, 2018
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. class Coada {
  8. private:
  9.     struct nod {
  10.         char *numePers;
  11.         nod *next;
  12.     };
  13.     nod *head=NULL, *last=NULL;
  14. public:
  15.     Coada(); // constructor de initializare gol (de obicei trebuie sa scrii ceva in el
  16.     Coada(Coada &Pers); // constructor de copiere
  17.     ~Coada(); // destructor
  18.     void Adaugare(char *Pers);
  19.     void Eliminare(char *Pers);
  20.     void Vid();
  21.     void Afisare();
  22. };
  23.  
  24. Coada::Coada() {
  25.     // nu iti specifica in enunt daca trebuie sa pui ceva in
  26.     // constructorul de initializare , plus ca mai spune sa
  27.     // adaugi o functie numita "vid" . Daca initializezi
  28.     // direct in constructorul de initializare pe "head" cu ceva
  29.     // atunci el nu o sa mai fie NULL , si automat fctia Vid nu are sens
  30.     // daca tu il initializezi mereu cu "Ceva" , e clar ca nu o sa fie vid :))
  31. }
  32. Coada::Coada(Coada & Pers ) {
  33.     if (Pers.head != NULL) {
  34.         for (nod *Actual = Pers.head; Actual != NULL; Actual = Actual->next) {
  35.             this->Adaugare(Actual->numePers); // copiem si punem in "Malina" toate numele din "Pers" (adica din ceva)
  36.         }
  37.     }
  38.    
  39. }
  40. Coada::~Coada() {
  41.     cout << "s-a apelat destructorul";
  42. }
  43. void Coada::Adaugare(char *Pers) {
  44.     if (head != NULL) {
  45.         nod *newNode = new nod;
  46.         newNode->numePers = new char[50];// Pers este un "pointer de tip char, cel care il scrii tu
  47.         newNode->numePers = Pers; // in paranteze la ceva.Adaugare("text"), Pers e "text"
  48.         last->next = newNode;
  49.         last = newNode;
  50.         last->next = NULL;
  51.     }
  52.     else { // Daca lista nu are nici un element ,initializezi head
  53.         head = new nod;
  54.         head->numePers = new char[50];
  55.         head->numePers = Pers;
  56.         head->next = NULL;
  57.         last = head;
  58.     }
  59. }
  60.  
  61. void Coada::Eliminare(char *Pers) {//stergere dupa numele Persoanei
  62.     if (head != NULL) {//if-ul asta il pui mereu , in caz de lista e vida sa nu intre
  63.                         // si sa ai erori surprise
  64.  
  65.         for (nod *Actual = head; Actual != NULL; Actual = Actual->next) {
  66.  
  67.             if (head->numePers == Pers) { //daca pers. e prima(head),
  68.                 nod *temp = head; // creezi nod temporar sa ramana pe nodul "head"
  69.                 head = head->next; // head se muta pe urmatorul nod
  70.                 delete temp; //delete temp adica vechiul head
  71.                 break; // iesim pt ca ne intereseaza sa stergem doar pe unu
  72.             }
  73.  
  74.             if (Actual->numePers == Pers) { // daca pers. pe pozita de la 2 incolo
  75.                 nod *inainte_de_Actual = head; // creem un nod , care sa se afle pe pozitia dinainte de actual
  76.                 while (inainte_de_Actual->next != Actual && inainte_de_Actual->next != NULL) { // conditia e sa oblige pe inainte_de_Actual
  77.                     inainte_de_Actual = inainte_de_Actual->next; //  sa ramana pe nodul dinainte de Actual si != NULL e pentru
  78.                                                                  // a nu da eroare daca Coada are "2" elemente
  79.                 }
  80.  
  81.                 inainte_de_Actual->next = Actual->next; // https://i.imgur.com/EvMGAZr.png , poza explicatorie
  82.  
  83.                 if (last == Actual) { // in caz de Actual se afla pe ultima pozitie
  84.                     last = inainte_de_Actual; // pune last pe penultima pozitie
  85.                 }
  86.                 delete Actual; // stergem nodul
  87.                 break; // iesim ca nu mai avem treaba am sters individul
  88.             }
  89.         }
  90.     }
  91. }
  92.  
  93. void Coada::Afisare() {
  94.     if (head != NULL) {
  95.         for (nod *temp = head; temp != NULL; temp = temp->next) {
  96.             cout << temp->numePers << ",";
  97.         }
  98.         printf("%c%c%c", 8, 32, 8); // asta este pentru fitze , nu te intereseaza
  99.     }
  100. }
  101.  
  102. void Coada::Vid() {
  103.     if (head != NULL) {
  104.         cout << "\nNu este vida Coada\n";
  105.     }
  106.     else {
  107.         cout << "\nEste vida Coada\n";
  108.     }
  109. }
  110.  
  111. void main() {
  112.     Coada ceva;
  113.     ceva.Vid();
  114.     ceva.Adaugare("Unu");
  115.     ceva.Adaugare("Doi");
  116.     ceva.Adaugare("Trei");
  117.     ceva.Afisare();
  118.     ceva.Vid();
  119.     ceva.Eliminare("Doi");
  120.     ceva.Afisare();
  121.     Coada Malina(ceva); // pui in Malina ceva  si gata ;
  122.     cout << "\nMalina = ";
  123.     Malina.Afisare();
  124.     _getch();
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement