online: 3; azi: 615; total: 51070 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ă în care ordinea de acces este cea în care sunt citite numerele din fişier . Se inserează între fiecare pereche de noduri cel mai mare divizor comun al celor două numere.
# include < iostream >
# include < fstream >
using namespace std ;
struct Node {
int data;
Node * next ;
};
Node * createNode ( int val) {
Node * newNode = new Node ();
newNode ->data = val;
newNode -> next = NULL ;
return newNode ;
}
void insert ( Node ** headRef , int val) {
Node * newNode = createNode (val);
if (* headRef == NULL ) {
* headRef = newNode ;
} else {
Node * temp = * headRef ;
while ( temp -> next != NULL ) {
temp = temp -> next ;
}
temp -> next = newNode ;
}
}
int gcd ( int a, int b) {
if (b == 0 ) {
return a;
} else {
return gcd (b, a % b);
}
}
void insertGCD ( Node ** headRef , int val1, int val2) {
int div = gcd (val1, val2);
Node * newNode = createNode (div);
Node * temp = * headRef ;
while ( temp != NULL ) {
Node * nextNode = temp -> next ;
if ( nextNode != NULL ) {
newNode -> next = nextNode ;
temp -> next = newNode ;
temp = nextNode ;
} else {
temp -> next = newNode ;
temp = NULL ;
}
}
}
void printList ( Node * head ) {
Node * temp = head ;
while ( temp != NULL ) {
cout << temp ->data << " " ;
temp = temp -> next ;
}
cout << endl ;
}
int main () {
ifstream fin ( "input.txt" ) ;
Node * list = NULL ;
int val;
while (fin >> val) {
insert(& list , val);
}
fin.close ();
Node * temp1 = list ;
while (temp1 != NULL && temp1-> next != NULL ) {
insertGCD (& list , temp1->data, temp1-> next ->data);
temp1 = temp1-> next -> next ;
}
printList ( list );
return 0 ;
}