Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C]liste, malloc, realloc, non capisco alcune cose...

    salve a tutti...mi trovo a studiare le liste e le funzioni malloc e realloc...molte cose le ho capite..ma, se per esempio devo fare una cosa simile:
    prendere i dati da una lista e confrontarli con delle stringhe immesse dall'utente...es :
    nome:
    cognome:
    le devo confrontare con tutti gli elementi della lista per vedere se esistono...in caso negativo, aggiungere tali stringhe nella lista...ora, ho davvero studiato le liste e come funzionano...ho capito anche come funzionano le realloc e malloc...la sizeof ecc...ma non riesco a fare l'esercizio... devo utilizzare una struttura simile :

    struct persona {
    char nome[2];
    char *cognome;
    struct persona *next;
    }

    ...qualcuno mi puo' aiutare?

  2. #2
    fino ad ora ho fatto questo
    codice:
    #include <stdio.h>
    #include <malloc.h>
    
    #define Num(array)(sizeof(array)/sizeof(array[0]))/*questo mi serve solo per sapere se realloc ha fatto bene il suo lavoro....*/
    
    
    int funzione(char *puntatore,char *abb,char *par){
    /*qui dovrei confrontare abb e par nella lista per vedere se esistono*/
    /*se si -> stamparle a video*/
    /*altrimenti -> aggiungerle alla lista*/
    
        return 0;
    }
    
    
    int main(){
    
    struct elem {
    char abbr[2];
    char *estesa;
    struct elem *next;
    }prova;
    
    struct elem *puntatoremain;
    printf("Abbreviazione: ");
    scanf("%s",prova.abbr);
    
    printf("Parola: ");
    scanf("%s",prova.estesa);
    
    funzione(puntatoremain,prova.abbr,prova.estesa);
    
    scanf("%d");
    return 0;
    }
    fino ad ora ho fatto questo...non so fare la lista da mettere nella funzione ...forse devo usare quella fornita dall'esercizio sulla funzione, e allargarla ogni volta che aggiungo una cosa..e creami una nuova struttura per prendere i file in input...?

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    214
    Ti serve un ciclo sulla lista. Parti dal primo elemento e confronti abb e par con i campi che ti interessano nella struttura, se non c'è corrispondenza passi all'elemento successivo della lista, altrimenti ti fermi. Per darti un'idea, il ciclo dovrà essere nella forma:

    codice:
    while(lista != NULL){
         if ( (strcmp(abb, elementodellalista) != 0) && (strcmp(abb, elementodellalista) != 0) ){
                   //Elemento esistente, stampa. 
                   flag_exist = 1; 
                   break; 
         }
         
    lista = lista->next; 
    }
    
    if(flag_exist == 0)
     aggiungiElemento();
    La condizione dell'if la devi cambiare se ti serve sapere se c'è corrispondenza solo con uno dei due elementi (non lo hai specificato). La funzione aggiungiElemento() sarà quella che ti andrà a creare un nuovo elemento in testa o in coda alla lista, con una delle millemila implementazioni che puoi trovare facilmente in rete o su un libro di testo. Sono tutte nella stessa forma: parti dal primo elemento, se è nullo, allora aggiungi l'elemento. Altrimenti scorri la lista fino a che non trovi elemento->next = NULL. Ora elemento->next dovrà puntare all'elemento che aggiungi tu, e quello che hai aggiunto a NULL.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.