online: 9; azi: 513; total: 50968 Manual clasa a xi a - Implementarea structurilor de date - Lista liniara

Probleme Rezolvate



Manual clasa a Xi a

Implementarea structurilor de date

Lista liniara

Se formează din două cozi o a treia coadă care conține mai întâi numerele pare din pozițiile impare din prima coadă şi apoi numerele impare din poziţiile pare din a doua coadă.
# include < iostream >
# include < fstream >
# include < string >
# include < sstream >
struct Nod {
int val;
Nod* urm;
};
struct Coada {
Nod* inceput ;
Nod* sfarsit ;
};
void init_coada (Coada& coada) {
coada.inceput = nullptr ;
coada.sfarsit = nullptr ;
}
bool coada_goala ( const Coada& coada) {
return coada.inceput == nullptr ;
}
void push (Coada& coada, int val) {
Nod* nod_nou = new Nod{val, nullptr };
if ( coada_goala (coada)) {
coada.inceput = nod_nou ;
} else {
coada.sfarsit ->urm = nod_nou ;
}
coada.sfarsit = nod_nou ;
}
void pop (Coada& coada) {
if ( coada_goala (coada)) {
throw std :: runtime_error ( "Coada este goala." );
}
Nod* nod_vechi = coada.inceput ;
coada.inceput = nod_vechi ->urm;
if ( coada.inceput == nullptr ) {
coada.sfarsit = nullptr ;
}
delete nod_vechi ;
}
int front ( const Coada& coada) {
if ( coada_goala (coada)) {
throw std :: runtime_error ( "Coada este goala." );
}
return coada.inceput ->val;
}
Coada formeaza_coada ( const Coada& coada1, const Coada& coada2) {
Coada rezultat;
init_coada (rezultat);
Nod* nod_curent1 = coada1.inceput;
int pozitie1 = 1 ;
while (nod_curent1 != nullptr ) {
if (pozitie1 % 2 == 1 && nod_curent1->val % 2 == 0 ) {
push (rezultat, nod_curent1->val);
}
nod_curent1 = nod_curent1->urm;
pozitie1++;
}
Nod* nod_curent2 = coada2.inceput;
int pozitie2 = 1 ;
while (nod_curent2 != nullptr ) {
if (pozitie2 % 2 == 0 && nod_curent2->val % 2 == 1 ) {
push (rezultat, nod_curent2->val);
}
nod_curent2 = nod_curent2->urm;
pozitie2++;
}
return rezultat;
}
int main () {
Coada coada1, coada2;
init_coada (coada1);
init_coada (coada2);
// Citirea numerelor pentru coada1 din fisierul "numere1.txt"
std :: ifstream fisier1 ( "numere1.txt" ) ;
std :: string linie1;
std :: getline (fisier1, linie1);
fisier1. close ();
std :: istringstream iss1 (linie1) ;
int numar1;
while (iss1 >> numar1) {
push (coada1, numar1);
}
// Citirea numerelor pentru coada2 din fisierul "numere2.txt"
std :: ifstream fisier2 ( "numere2.txt" ) ;
std :: string linie2;
std :: getline (fisier2, linie2);
fisier2. close ();
std :: istringstream iss2 (linie2) ;
int numar2;
while (iss2 >> numar2) {
push (coada2, numar2);
}
Coada coada3 = formeaza_coada (coada1, coada2);
// Afisarea elementelor din coada3
while (! coada_goala (coada3)) {
std :: cout << front (coada3) << " " ;
pop (coada3);
}
return 0 ;
}