online: 10; azi: 233; total: 52239 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 creează o listă ordonată crescător şi se creează apoi din această listă o listă cu numerele care sunt pătrate perfecte.
# include < iostream >
# include < iostream >
# include < fstream >
# include < cmath >
struct Nod {
int valoare;
Nod* urmator ;
};
void inserareOrdonata (Nod*& lista, int valoare) {
Nod* nod = new Nod;
nod->valoare = valoare;
nod-> urmator = nullptr ;
if (lista == nullptr ) {
lista = nod;
return ;
}
if (valoare < lista->valoare) {
nod-> urmator = lista;
lista = nod;
return ;
}
Nod* p = lista;
while (p-> urmator != nullptr && valoare >= p-> urmator ->valoare) {
p = p-> urmator ;
}
nod-> urmator = p-> urmator ;
p-> urmator = nod;
}
int main () {
// Citire lista circulara din fisier
std :: ifstream fisier ( "lista.txt" ) ;
Nod* lista = nullptr ;
Nod* ultimulNod = nullptr ;
int valoare;
while ( fisier >> valoare) {
inserareOrdonata (lista, valoare);
}
ultimulNod = lista;
while ( ultimulNod -> urmator != nullptr ) {
ultimulNod = ultimulNod -> urmator ;
}
ultimulNod -> urmator = lista;
// Cream lista cu numerele patrate perfecte
Nod* listaPatrate = nullptr ;
Nod* ultimulNodPatrate = nullptr ;
Nod* p = lista;
do {
if ( std :: sqrt (p->valoare) == std :: floor ( std :: sqrt (p->valoare))) {
Nod* nod = new Nod;
nod->valoare = p->valoare;
nod-> urmator = listaPatrate ;
if ( listaPatrate == nullptr ) {
listaPatrate = nod;
}
else {
ultimulNodPatrate -> urmator = nod;
}
ultimulNodPatrate = nod;
}
p = p-> urmator ;
} while (p != lista);
// Afisam lista patratelor perfecte
std :: cout << "Lista patratelor perfecte: " ;
p = listaPatrate ;
do {
std :: cout << p->valoare << " " ;
p = p-> urmator ;
} while (p != listaPatrate );
std :: cout << std :: endl ;
// Eliberam memoria alocata dinamic
p = listaPatrate ;
do {
Nod* q = p;
p = p-> urmator ;
delete q;
} while (p != listaPatrate );
p = lista;
do {
Nod* q = p;
p = p-> urmator ;
delete q;
} while (p != lista);
return 0 ;
}

În această problemă, trebuie să citim numerele din fișier, să le inserăm ordonat într-o listă circulară simplu înlănțuită și apoi să creăm o altă listă circulară simplu înlănțuită care să conțină doar numerele care sunt pătrate perfecte. Lista patratelor perfecte este afișată la sfârșitul programului.
Pentru a testa programul, putem folosi același fișier de intrare ca în problema anterioară și să adăugăm numere care sunt pătrate perfecte în fișier pentru a verifica dacă lista patratelor perfecte este corectă.
Pentru a putea rula programul, ar trebui să aveți un fișier text lista.txt care să conțină o listă de numere întregi separate prin spații, pe un singur rând. De exemplu, conținutul fișierului ar putea fi:
2 4 6 9 11 13 16 19 21 25