Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <stdio.h>
- using namespace std;
- class Coada {
- private:
- struct nod {
- char *numePers;
- nod *next;
- };
- nod *head=NULL, *last=NULL;
- public:
- Coada(); // constructor de initializare gol (de obicei trebuie sa scrii ceva in el
- Coada(Coada &Pers); // constructor de copiere
- ~Coada(); // destructor
- void Adaugare(char *Pers);
- void Eliminare(char *Pers);
- void Vid();
- void Afisare();
- };
- Coada::Coada() {
- // nu iti specifica in enunt daca trebuie sa pui ceva in
- // constructorul de initializare , plus ca mai spune sa
- // adaugi o functie numita "vid" . Daca initializezi
- // direct in constructorul de initializare pe "head" cu ceva
- // atunci el nu o sa mai fie NULL , si automat fctia Vid nu are sens
- // daca tu il initializezi mereu cu "Ceva" , e clar ca nu o sa fie vid :))
- }
- Coada::Coada(Coada & Pers ) {
- if (Pers.head != NULL) {
- for (nod *Actual = Pers.head; Actual != NULL; Actual = Actual->next) {
- this->Adaugare(Actual->numePers); // copiem si punem in "Malina" toate numele din "Pers" (adica din ceva)
- }
- }
- }
- Coada::~Coada() {
- cout << "s-a apelat destructorul";
- }
- void Coada::Adaugare(char *Pers) {
- if (head != NULL) {
- nod *newNode = new nod;
- newNode->numePers = new char[50];// Pers este un "pointer de tip char, cel care il scrii tu
- newNode->numePers = Pers; // in paranteze la ceva.Adaugare("text"), Pers e "text"
- last->next = newNode;
- last = newNode;
- last->next = NULL;
- }
- else { // Daca lista nu are nici un element ,initializezi head
- head = new nod;
- head->numePers = new char[50];
- head->numePers = Pers;
- head->next = NULL;
- last = head;
- }
- }
- void Coada::Eliminare(char *Pers) {//stergere dupa numele Persoanei
- if (head != NULL) {//if-ul asta il pui mereu , in caz de lista e vida sa nu intre
- // si sa ai erori surprise
- for (nod *Actual = head; Actual != NULL; Actual = Actual->next) {
- if (head->numePers == Pers) { //daca pers. e prima(head),
- nod *temp = head; // creezi nod temporar sa ramana pe nodul "head"
- head = head->next; // head se muta pe urmatorul nod
- delete temp; //delete temp adica vechiul head
- break; // iesim pt ca ne intereseaza sa stergem doar pe unu
- }
- if (Actual->numePers == Pers) { // daca pers. pe pozita de la 2 incolo
- nod *inainte_de_Actual = head; // creem un nod , care sa se afle pe pozitia dinainte de actual
- while (inainte_de_Actual->next != Actual && inainte_de_Actual->next != NULL) { // conditia e sa oblige pe inainte_de_Actual
- inainte_de_Actual = inainte_de_Actual->next; // sa ramana pe nodul dinainte de Actual si != NULL e pentru
- // a nu da eroare daca Coada are "2" elemente
- }
- inainte_de_Actual->next = Actual->next; // https://i.imgur.com/EvMGAZr.png , poza explicatorie
- if (last == Actual) { // in caz de Actual se afla pe ultima pozitie
- last = inainte_de_Actual; // pune last pe penultima pozitie
- }
- delete Actual; // stergem nodul
- break; // iesim ca nu mai avem treaba am sters individul
- }
- }
- }
- }
- void Coada::Afisare() {
- if (head != NULL) {
- for (nod *temp = head; temp != NULL; temp = temp->next) {
- cout << temp->numePers << ",";
- }
- printf("%c%c%c", 8, 32, 8); // asta este pentru fitze , nu te intereseaza
- }
- }
- void Coada::Vid() {
- if (head != NULL) {
- cout << "\nNu este vida Coada\n";
- }
- else {
- cout << "\nEste vida Coada\n";
- }
- }
- void main() {
- Coada ceva;
- ceva.Vid();
- ceva.Adaugare("Unu");
- ceva.Adaugare("Doi");
- ceva.Adaugare("Trei");
- ceva.Afisare();
- ceva.Vid();
- ceva.Eliminare("Doi");
- ceva.Afisare();
- Coada Malina(ceva); // pui in Malina ceva si gata ;
- cout << "\nMalina = ";
- Malina.Afisare();
- _getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement