online: 4; azi: 143; total: 52149 Manual clasa a xi a - Implementarea structurilor de date - Lista liniara

Probleme Rezolvate



Manual clasa a Xi a

Implementarea structurilor de date

Lista liniara

Există două automate care eliberează bonuri de ordine pentru o coadă de aşteptare . Pe fiecare bon de ordine este trecut numărul bonului şi momentul la care a fost elibera: (exprimat în oră, minut şi secundă). Bonurile au numere unice. Deservirea persoanelor se face în ordinea momentului de eliberare a bonurilor. Să se organizeze o coadă de aşteptare pe baza bonurilor emise de cele două automate.
# include < iostream >
struct Bon {
int numar ;
int ora, minut, secunda;
};
struct Nod {
Bon bon ;
Nod* urmator ;
};
bool comparaBonuri ( const Bon& a, const Bon& b) {
return a.ora < b.ora || ( a.ora == b.ora && a.minut < b.minut ) || ( a.ora == b.ora && a.minut == b.minut && a.secunda < b.secunda );
}
void adauga (Nod*& inceput , const Bon& bon) {
Nod* nodNou = new Nod{bon, nullptr };
if (! inceput || comparaBonuri (bon, inceput ->bon)) {
nodNou -> urmator = inceput ;
inceput = nodNou ;
} else {
Nod* nodCurent = inceput ;
while ( nodCurent -> urmator && ! comparaBonuri (bon, nodCurent -> urmator ->bon)) {
nodCurent = nodCurent -> urmator ;
}
nodNou -> urmator = nodCurent -> urmator ;
nodCurent -> urmator = nodNou ;
}
}
Bon scoate (Nod*& inceput ) {
Nod* nodScoat = inceput ;
Bon bon = nodScoat ->bon;
inceput = inceput -> urmator ;
delete nodScoat ;
return bon;
}
int main () {
Nod* coada = nullptr ;
// Adăugăm bonurile de la cele două automate (exemplu cu 5 bonuri de la fiecare automat)
for ( int i = 0 ; i < 10 ; ++i) {
Bon bon ;
bon.numar = i + 1 ;
bon.ora = rand () % 24 ;
bon.minut = rand () % 60 ;
bon.secunda = rand () % 60 ;
adauga (coada, bon);
}
// Afișăm și eliminăm bonurile din coadă în ordinea momentului de eliberare
while (coada) {
Bon bon = scoate (coada);
std :: cout << " Numar bon: " << bon.numar
<< ", moment eliberare: " << bon.ora << ":"
<< bon.minut << ":" << bon.secunda << std :: endl ;
}
return 0 ;
}