Untitled

 avatar
unknown
c_cpp
22 days ago
2.4 kB
2
Indexable
Definire un tipo di dato opportuno per la rappresentazione e manipolazione di una lista di valori interi.
Scrivere un sottoprogramma che riceve in ingresso due liste di interi l1 ed l2, ed un intero k positivo o nullo. Il sottoprogramma restituisce
1 se l1 contiene (nello stesso ordine) tutti gli elementi di l2, eventualmente inframezzati da al massimo k altri valori. In caso contrario, o se
almeno una delle due liste è vuota, il sottoprogramma restituisce 0. Ciascuna lista contiene elementi tutti distinti tra loro.
Esempio:
Se il sottoprogramma riceve in ingresso
l1 = 9 -> 4 -> 1 -> 2 -> -4 -> 7 -> -2 -> 6 -> 8 -> 5
l2 = 2 -> -2 -> 6
k = 2
restituisce 1.
Se il sottoprogramma riceve in ingresso
l1 = 9 -> 4 -> 1 -> 2 -> -4 -> 7 -> -2 -> 6 -> 8 -> 5
l2 = 2 -> -2 -> 6
k = 1
restituisce 0 poichè in l1 tra i due nodi con valore 2 e−2 (presenti in l2) c’è più di un elemento.
Se il sottoprogramma riceve in ingresso
l1 = 9 -> 4 -> 1 -> 2 -> -4 -> 7 -> -2 -> 6 -> 8 -> 0
l2 = 2 -> 5 -> 6
k = 2
restituisce 0 poichè in l1 non c’è un elemento con valore 5 successivamente all’elemento con valore 2.
*/

#include <stdio.h>

int verificaListe(nodo_t *l1, nodo_t *l2, int k) {
    if(l1 == NULL || l2 == NULL)
    {
        return 0;
    }
    
    nodo_t *curr1=l1;
    nodo_t *curr2=l2;
    
    while(curr1 != NULL && curr2 != NULL) {
        if(curr1->num == curr2->num)
        {
            curr1=curr1->next;
        	curr2=curr2->next;
        	
        	if(curr2==NULL)
        	{
        		return 1;
        	}
        	
            int tmp_k = k;
            nodo_t *tmp_curr1= curr1;
            int trovato =0;
            
            /*
            l1 = 9 -> 4 -> 1 -> 2 -> -4 -> 7 -> -2 -> 6
            l2 = 2 -> -2 -> 6
            k = 2
            */
            
            while(tmp_k >=0 && tmp_curr1 != NULL && !trovato)
            {
                if(tmp_curr1->num == curr2 -> num)
                {
                    curr1 = tmp_curr1;
                    trovato = 1;
                }
                tmp_curr1 = tmp_curr1->next;
                tmp_k--;
            }
            
            if(!trovato)
            {
                return 0;
            }
            
        }
        else
        {
            curr1 = curr1->next;
        }
    }    
    return 0;
}

int main() {
  

    return 0;
}
Leave a Comment