Visualizzazione dei risultati da 1 a 1 su 1
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    3

    [C] Ordinamento di una lista ricorsiva

    ciao a tutti, sono riuscito a creare la lista ordinata versione iterativa e non riesco a creare la versione ricorsiva. vi lascio il codice in versione iterativa
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include<assert.h>
    struct sInfo{
        int value
    };
    typedef struct sInfo tInfo;
    struct sNode{
        tInfo info;
        struct sNode *link;
    
    
    };
    typedef struct sNode tNode;
    typedef  tNode* tList;
    tList crea_lista();
    tInfo leggi_info();
    tList inserisci_elemento(tList lista,tInfo info);
    void stampa_lista(tList lista);
    
    
    int main()
    {
      tList lista;
      tInfo info;
      int i,dim;
        lista=crea_lista();
        printf("quanti elementi inserire");
        scanf("%d",&dim);
        for(i=0;i<dim;i++){
            info=leggi_info();
            lista=inserisci_elemento(lista,info);
    
    
        }
        stampa_lista(lista);
    
    
    }
    
    
    
    
    //inizializza lista
    tList crea_lista(){
    return NULL;
    }
    tInfo leggi_info(){
    tInfo info;
    printf("Inserisci numero ");
    scanf("%d",&info.value);
    return info;
    }
    /*inserimento in ordine
    1)ricerca della posizione
    2)allocazione dinamica;
    3)aggiornamento dei collegamenti
    
    
    */
    tList inserisci_elemento(tList lista,tInfo info){
       tList prec,curr,newnode;
        prec=NULL;
        curr=lista;
        //1)ricerca della posizione di inserimento
        while((curr!=NULL)&&(info.value> curr->info.value )){
            prec=curr;
            curr=curr->link;
    
    
    
    
        }
        //2)allocazione dinamica
        newnode=(tNode *)malloc(sizeof(tNode));
        assert(newnode!=NULL);
        newnode->info=info;
        //3)aggiornamento dei collegamenti
        if(prec==NULL){
            newnode->link=lista;
            lista=newnode;
            return lista;
        }else{
            prec->link=newnode;
            newnode->link=curr;
            return lista;
        }
    
    
    }
    void stampa_lista(tList lista){
    tList curr;
    curr=lista;//curr è il primo nodo della lista
    while(curr!=NULL){
            printf("%d ",curr->info.value);
        curr=curr->link;
    }
    
    
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2017
    Messaggi
    3
    ho provato a fare in questo modo ma non riesco a confrontare i due elementi
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    struct s_nodo{
    int info;
    struct s_nodo *next;
    };
    typedef struct s_nodo nodo; //nodo della lista
    typedef nodo *puntaNodo;//puntatore ad un elelemnto
    void inserisciCoda(puntaNodo *lista,int n);
    void prova(puntaNodo *lista);
    int main()
    {
        int x;
        puntaNodo pTesta; //puntatore al primo elelemnto della lista
        puntaNodo pNodo; //puntatore ad un generico nodo
        pTesta=NULL;
         pNodo=NULL;
        int n=3;
     inserisciCoda(&pTesta,n);
     prova(&pTesta);
    //Stampa(&pTesta,n);
    }
    
    
    void Stampa(puntaNodo *lista,int n);
    void inserisciCoda(puntaNodo *lista,int n){
    puntaNodo ultimo;
    puntaNodo pNodo;
    int v;
    if(n>0){
    printf("elemento ");
    scanf("%d",&v);
    pNodo=malloc(sizeof(nodo));
    pNodo->info=v;
    pNodo->next=NULL;
    if(*lista==NULL){
        *lista=pNodo;
    }else{
        ultimo=*lista;
        if(ultimo->next!=NULL) ultimo=ultimo->next;
        ultimo->next=pNodo;
    }
    
    
    }
    if(n!=0){
    inserisciCoda(lista,(n-1));
    }
    }
    
    
    void Stampa(puntaNodo *lista,int n){
    puntaNodo curr;
    curr=lista;
    if(curr!=NULL){
            printf("%d ",curr->info);
        curr=curr->next;
    Stampa(curr,n-1);
    }
    
    
    }
    void prova(puntaNodo *lista){
    puntaNodo curr;
    curr=lista;
    while(curr!=NULL){
    if((curr->info) > (curr->info)+1){
        printf("si");
    }
    curr=curr->next;
    }
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.