online: 8; azi: 75; total: 52081 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 verifică dacă numerele dintr-o coadă sunt ordonate (crescător sau descrescător).
# 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 ;
}
int front ( const Coada& coada) {
if ( coada_goala (coada)) {
throw std :: runtime_error ( "Coada este goala." );
}
return coada.inceput ->val;
}
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 ;
}
bool este_ordonata ( const Coada& coada, bool crescator ) {
if ( coada_goala (coada)) {
return true ;
}
Nod* nod_curent = coada.inceput ;
int precedent = nod_curent ->val;
nod_curent = nod_curent ->urm;
while ( nod_curent != nullptr ) {
if ( crescator && precedent > nod_curent ->val) {
return false ;
} else if (! crescator && precedent < nod_curent ->val) {
return false ;
}
precedent = nod_curent ->val;
nod_curent = nod_curent ->urm;
}
return true ;
}
int main () {
std :: ifstream fisier ( "numere.txt" ) ;
std :: string linie;
std :: getline ( fisier , linie);
fisier. close ();
std :: istringstream iss (linie) ;
Coada coada ;
init_coada (coada);
int numar ;
while ( iss >> numar ) {
push (coada, numar );
}
bool crescator = este_ordonata (coada, true );
bool descrescator = este_ordonata (coada, false );
if ( crescator ) {
std :: cout << "Coada este ordonata crescator .\n" ;
} else if ( descrescator ) {
std :: cout << "Coada este ordonata descrescator .\n" ;
} else {
std :: cout << "Coada nu este ordonata.\n" ;
}
return 0 ;
}