online: 5; azi: 1164; total: 51619 Manual clasa a xi a - Implementarea structurilor de date - Lista liniara

Probleme Rezolvate



Manual clasa a Xi a

Implementarea structurilor de date

Lista liniara

Să se insereze între două numere pare din listă media lor aritmetică până când nu mai există perechi de numere pare.
V om implementa următoarele subprograme:
# include < iostream >
# include < fstream >
using namespace std ;
struct Node {
int data;
Node * next ;
};
bool areBothEven ( int a, int b) {
return (a % 2 == 0 && b % 2 == 0 );
}
void insertAverageBetweenEvens ( Node * head ) {
Node * current = head ;
while ( current != nullptr && current -> next != nullptr ) {
if ( areBothEven ( current ->data, current -> next ->data)) {
int average = ( current ->data + current -> next ->data) / 2 ;
Node * newNode = new Node ;
newNode ->data = average ;
newNode -> next = current -> next ;
current -> next = newNode ;
current = newNode -> next ;
} else {
current = current -> next ;
}
}
}
void removePairsOfEvenNumbers ( Node * head ) {
Node * current = head ;
while ( current != nullptr && current -> next != nullptr ) {
if ( areBothEven ( current ->data, current -> next ->data)) {
Node * temp = current -> next ;
current -> next = temp -> next ;
delete temp ;
} else {
current = current -> next ;
}
}
}
void printList ( Node * head ) {
Node * current = head ;
while ( current != nullptr ) {
cout << current ->data << " " ;
current = current -> next ;
}
cout << endl ;
}
int main () {
ifstream inFile ;
inFile. open ( "input.txt" );
Node * head = nullptr ;
Node * tail = nullptr ;
int num;
while ( inFile >> num) {
Node * newNode = new Node ;
newNode ->data = num;
newNode -> next = nullptr ;
if ( head == nullptr ) {
head = newNode ;
tail = newNode ;
} else {
tail -> next = newNode ;
tail = newNode ;
}
}
bool hasEvenNumbers = true ;
while ( hasEvenNumbers ) {
insertAverageBetweenEvens ( head );
removePairsOfEvenNumbers ( head );
hasEvenNumbers = false ;
Node * current = head ;
while ( current != nullptr && current -> next != nullptr ) {
if ( areBothEven ( current ->data, current -> next ->data)) {
hasEvenNumbers = true ;
break ;
}
current = current -> next ;
}
}
printList ( head );
return 0 ;
}

Observație: Pentru a elimina toate perechile de numere pare, am parcurs lista și am eliminat orice nod care are un nod succesor și ambele noduri conțin numere pare
Iată un exemplu de fișier "input.txt" care conține o listă de numere întregi pentru a fi prelucrată de acest program:
2 4 7 8 10 11 14 16 18