Untitled

 avatar
unknown
c_cpp
a month ago
2.1 kB
2
Indexable
/*

1) Definire il tipo di dato per rappresentare una lista dinamica di interi.
2) Scrivere un sottoprogramma che riceve in ingresso una lista dinamica di interi detta l. Il sottoprogramma crea e
restituisce una nuova lista l1 come segue: ogni elemento di l è inserito in coda a l1 se e solo se è maggiore di tutti i
suoi successivi in l. L’ultimo numero viene sempre aggiunto visto che non ha successivi.
Si assuma di avere a disposizione un sottoprogramma che appende un nuovo valore intero in coda ad una lista,
avente il seguente prototipo: nodo_t* inserisciInCoda(nodo_t* l, int n);
Esempio:
se l: 1 -> 12 -> 6 -> 2 -> 3
il sottoprogramma crea una nuova lista l1: 12 -> 6 -> 3
Variante:
2) Scrivere un sottoprogramma che riceve in ingresso una lista dinamica di interi detta l. Il sottoprogramma crea e
restituisce una nuova lista l1 come segue: ogni elemento di l è inserito in coda a l1 se e solo se è minore o uguale di
tutti i suoi successivi in l. L’ultimo numero viene sempre aggiunto visto che non ha successivi.
Si assuma di avere a disposizione un sottoprogramma che appende un nuovo valore intero in coda ad una lista
avente il seguente prototipo: nodo_t* inserisciInCoda(nodo_t* l, int n);
Esempio:
se l: 1 -> 12 -> 6 -> 2 -> 3
il sottoprogramma crea una nuova lista l1: 1 -> 2 -> 3

*/
#include <stdio.h>

typedef struct nodo{
    int num;
    struct nodo* next;
}nodo_t;

nodo_t* inserisciInCoda(nodo_t* l, int n);

nodo_t* creaListaMaggiori(nodo_t* l)
{
    nodo_t *l1=NULL;
    nodo_t *curr = l;
    
    while(curr != NULL)
    {
        nodo_t *succ = curr->next;
        int maggioreDiTutti = 1;
        
        while(succ != NULL && maggioreDiTutti)
        {
            if(curr->num <= succ->num)
            {
                maggioreDiTutti=0;
            }
            succ = succ ->next;
        }
        
        if(maggioreDiTutti || curr->next == NULL)
        {
            l1 = inserisciInCoda(l1, curr->num);
        }
        
        curr = curr->next;
    }
    
    return l1;
}

int main() {
    // Write C code here
    printf("Try programiz.pro");

    return 0;
}
Leave a Comment