online: 6; azi: 524; total: 50979 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ă două liste în care ordinea de acces este cea în care sunt citite numerele din fişiere . Se creează a treia listă prin concatenarea celei de a doua liste la prima listă. Se elimină din a treia listă numerele care se repetă.
# include < iostream >
# include < fstream >
# include < unordered_set >
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 ;
}
}
void concatenateLists ( Node ** headRef1, Node ** headRef2) {
Node * temp1 = *headRef1;
Node * temp2 = *headRef2;
if (temp1 == NULL && temp2 == NULL ) {
return ;
} else if (temp1 == NULL ) {
*headRef1 = temp2;
return ;
} else if (temp2 == NULL ) {
return ;
}
while (temp1-> next != NULL ) {
temp1 = temp1-> next ;
}
temp1-> next = temp2;
}
void removeDuplicates ( Node ** headRef ) {
unordered_set < int > s;
Node * temp = * headRef ;
Node * prev = NULL ;
while ( temp != NULL ) {
if ( s. find ( temp ->data) != s. end ()) {
prev -> next = temp -> next ;
Node * toDelete = temp ;
temp = temp -> next ;
delete toDelete ;
} else {
s. insert ( temp ->data);
prev = temp ;
temp = temp -> next ;
}
}
}
void printList ( Node * head ) {
Node * temp = head ;
while ( temp != NULL ) {
cout << temp ->data << " " ;
temp = temp -> next ;
}
cout << endl ;
}
int main () {
ifstream fin1 ( "input1.txt" ) ;
Node * list1 = NULL ;
int val1;
while (fin1 >> val1) {
insert (&list1, val1);
}
fin1. close ();
ifstream fin2 ( "input2.txt" ) ;
Node * list2 = NULL ;
int val2;
while (fin2 >> val2) {
insert (&list2, val2);
}
fin2. close ();
concatenateLists (&list1, &list2);
removeDuplicates (&list1);
printList (list1);
return 0 ;
}