Problema liste linguaggio C

di il
6 risposte

Problema liste linguaggio C

Ciao a tutti. Sono uno studente universitario, ed ho studiato il linguaggio C, con tanto di dati strutturati e liste. Ho un problema per quanto riguarda un esercizio. Mi vengono date due liste a puntatori (di tipo Struct List [int value; struct list*next_ptr]) in ingresso alla funzione e mi viene chiesto di spostare elementi della prima lista nella seconda, senza allocare o deallocare memoria, cioè senza poter dichiarare puntatori temporanei o altro all'interno della funzione. Apparentemente la richiesta è molto semplice ma senza dichiarare uno strcuct list *tmp mi risulta impossibile farlo.

Vi faccio un esempio: Lista 1: 2 4 5 7 8
Lista 2: 3 4 6 8 9

In pratica devo completare la lista 1 con gli elementi presenti nella lista due, senza però mettere quelli già posseduti (per esempio il 4 non va messo). Nel fare tutto ciò alla fine devo ottenere:

Lista 1: 2 3 4 5 6 7 8 9
Lista 2: 4 8

Avete idea come sia possibile farlo senza allocare/deallocare memoria? Ci sto impazzendo. Grazie in anticipo.

6 Risposte

  • Re: Problema liste linguaggio C

    La memoria è già allocata per tutti gli elementi.

    Basta lavorare con i puntatori per agganciare/sganciare gli elementi.

    Non devi usare le funzioni di allocazione/deallocazione ma puoi usare i puntatori.
  • Re: Problema liste linguaggio C

    Grazie per la risposta veloce . Non ho capito bene cosa intendi. Se la mia funzione riceve in ingresso due doppi puntatori, ognuno per una lista, mi manca comunque un puntatore temporaneo che mi permetta di concludere l'azione. Io ho ragionato così:

    *ptrptr2=*ptrptr1
    *ptrptr1=*ptrptr->next_ptr

    A questo punto però ho perso l'indirizzo a cui puntava *ptrptr2, quindi non riesco più a scollegare l'elemento della lista 1 e a farlo puntare alla lista 2. Per questo mi servirebbe un ptr temporaneo per salvare l'indirizzo a cui punta inizialmente *ptrptr2, ma non posso usarlo, perchè sennò allocherei memoria no?
  • Re: Problema liste linguaggio C

    No. Puoi usare un puntatore e non allocare memoria.

    Cosa ti obbliga ad allocare memoria per usare un puntatore ?
  • Re: Problema liste linguaggio C

    Quindi dici che se dichiaro all'interno della funzione uno struct list *tmp non alloco nessuna memoria? Oppure lo devo caricare tra i parametri formali? Scusa l'ignoranza.
  • Re: Problema liste linguaggio C

    Se dichiari un puntatore non allochi memoria. La memoria si alloca assegnando al puntatore il valore restituito dalla malloc. Ma tu non esegui malloc.

    Puoi usare tranquillamente

    struct list *tmp, *tmp2, *tmp3;

    senza problemi.

    Ti consiglio di rivedere il concetto di puntatore.
  • Re: Problema liste linguaggio C

    Ecco...la risposta che cercavo. Grazie mille, mi hai salvato
Devi accedere o registrarti per scrivere nel forum
6 risposte