online: 7; azi: 1495; total: 51950 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 cu n noduri şi respectiv m noduri care conţin numere întregi generate aleatoriu în intervalul [ a,b ]. Valorile pentru numărul de noduri n, şi respectiv m, şi pentru limitele intervalului, a şi b, se citesc de la tastatură. Să se afişeze numai numerele distincte din cele două liste şi numărul care are cea mai mare frecvenţă de apariție în cele două liste.
# include < iostream >
# include < ctime >
# include < cstdlib >
struct Node {
int value ;
Node * next ;
};
struct FrequencyNode {
int value ;
int frequency ;
FrequencyNode * next ;
};
Node * create_node ( int value ) {
Node * new_node = new Node ;
new_node -> value = value ;
new_node -> next = nullptr ;
return new_node ;
}
FrequencyNode * create_frequency_node ( int value , int frequency ) {
FrequencyNode * new_node = new FrequencyNode ;
new_node -> value = value ;
new_node -> frequency = frequency ;
new_node -> next = nullptr ;
return new_node ;
}
void insert_frequency ( FrequencyNode *& head , int value ) {
FrequencyNode * current = head ;
while ( current ) {
if ( current -> value == value ) {
current -> frequency ++;
return ;
}
current = current -> next ;
}
FrequencyNode * new_node = create_frequency_node ( value , 1 );
new_node -> next = head ;
head = new_node ;
}
int main () {
int n, m, a, b;
std :: cout << " Introduceti n, m, a si b: " ;
std ::cin >> n >> m >> a >> b;
srand ( time ( 0 ));
Node *head1 = nullptr , *head2 = nullptr ;
for ( int i = 0 ; i < n; ++i) {
int value = a + rand () % (b - a + 1 );
Node * new_node = create_node ( value );
new_node -> next = head1;
head1 = new_node ;
}
for ( int i = 0 ; i < m; ++i) {
int value = a + rand () % (b - a + 1 );
Node * new_node = create_node ( value );
new_node -> next = head2;
head2 = new_node ;
}
FrequencyNode * head = nullptr ;
Node * current = head1;
while ( current ) {
insert_frequency ( head , current -> value );
current = current -> next ;
}
current = head2;
while ( current ) {
insert_frequency ( head , current -> value );
current = current -> next ;
}
FrequencyNode * max_freq_node = head ;
current = head1;
while ( current ) {
std :: cout << current -> value << " " ;
current = current -> next ;
}
std :: cout << std :: endl ;
current = head2;
while ( current ) {
std :: cout << current -> value << " " ;
current = current -> next ;
}
std :: cout << std :: endl ;
FrequencyNode * frequency_current = head ;
while ( frequency_current ) {
std :: cout << frequency_current -> value << " " ;
if ( frequency_current -> frequency > max_freq_node -> frequency ) {
max_freq_node = frequency_current ;
}
frequency_current = frequency_current -> next ;
}
std :: cout << std :: endl ;
std :: cout << " Numarul cu cea mai mare frecventa: " << max_freq_node -> value << std :: endl ;
return 0 ;
}

Acest program va citi valoarea lui n , m , a și b de la tastatură. Apoi, va crea două liste înlănțuite, head1 și head2 , conținând numere întregi aleatorii în intervalul [a, b] . Numărul de elemente în head1 este n , iar în head2 este m .
Pentru a calcula frecvența fiecărui număr, creăm o listă înlănțuită separată head care va stoca numerele distincte și frecvențele lor. Funcția insert_frequency se va ocupa de inserarea și actualizarea frecvențelor în lista de frecvențe.
Parcurgem lista head1 și inserăm valorile în lista de frecvențe. Apoi, parcurgem lista head2 și facem același lucru. Acest proces ne va oferi lista de frecvențe cu numerele distincte și frecvențele lor.
În final, afișăm ambele liste cu numerele întregi și lista cu numerele distincte. De asemenea, căutăm numărul cu cea mai mare frecvență și îl afișăm.
Acest program va genera și afișa două liste cu numere întregi aleatorii în intervalul specificat și va afișa numerele distincte din cele două liste, precum și numărul cu cea mai mare frecvență de apariție în ambele liste.