Aggiungere un nodo ad una lista concatenata

di il
8 risposte

Aggiungere un nodo ad una lista concatenata

Ciao!

Stavo provando a scrivere un codice per aggiungere un nodo ad una lista concatenata. L'esempio del libro (che ho provato a copiare su CodeBlocks) non funziona, perciò ho provato da sola a farlo.

Per prima cosa ho fatto una lista con 4 nodi e ho provato a printarla con MostraLista. Poi ho provato a creare e aggiungere il nuovo nodo q.

#include <stdio.h>
#include <stdlib.h>

struct nodo{
    int chiave;
    struct nodo *succ;
    struct nodo *prec;
};

typedef struct nodo nodo;

void MostraLista(nodo *lista);
nodo NuovoNodo(nodo *nodo,int chiave);


int main()
{

    nodo p1 = {1, NULL, NULL};
    nodo p2 = {2, NULL, NULL};
    nodo p3 = {3, NULL, NULL};
    nodo p4 = {4, NULL, NULL};

    p1.succ = &p2;
    p2.succ = &p3;
    p3.succ = &p4;

    p4.prec = &p3;
    p3.prec = &p2;
    p2.prec = &p1;

    int *lista = &p1;

    MostraLista(lista);

    printf("\n---------------\n");

    NuovoNodo(nodo ????, int chiave); //non so come mandare con nodo

    return 0;
}


void MostraLista(nodo *lista){

    nodo *tmp = lista;

    while( tmp != NULL){
        printf("%d\n", tmp->chiave);
        tmp = tmp->succ;
    }
}

nodo NuovoNodo(nodo *nodo, int chiave){ //ho usato nodo NuovoNodo perché il mio prof faceva così, il libro usava void

    nodo q = malloc(sizeof(nodo));

    //voglio aggiungere un nodo tra p1 e p2, dando per scontato che ci sia memoria sufficiente per farlo

    q->prec = p1;
    q->succ = p1->succ;
    p1->succ->prec = q;
    p1->succ = q;


}
è evidente che ho sbagliato qualcosa... ma cosa?

8 Risposte

  • Re: Aggiungere un nodo ad una lista concatenata

    Ma i vecchi nodi li modifichi?
  • Re: Aggiungere un nodo ad una lista concatenata

    In teoria no, voglio solo aggiungerne uno nuovo..
  • Re: Aggiungere un nodo ad una lista concatenata

    E normale che non ti funzioni perche il nuovo nodo e scollegato!
    allora una lista funziona nel seguente modo:
    punt.prec punt. succ campo ;struttura base
    adesso situazione iniziale
    null 2 campo
    1 3 campo
    2 4 campo
    3 null campo
    vogliamo aggiungere il nodo 5 alla fine della lista
    null 2 campo
    1 3 campo
    2 4 campo
    3 5 campo (punt. succ = 5 rappresenta il nuovo nodo)
    4 null campo (sarà il nuovo nodo.)
    vogliamo aggiungere il nuovo nodo 5 tra il secondo e il terzo
    null 2 campo
    1 5 campo inserisco qui il nuovo nodo che sarà : 1 5 ; modifico il puntatore successivo del 2 nodo e lo faccio puntare al nuovo nodo
    5 4 campo ; modifico il puntatore precedente del 3 nodo affinche punti al nuovo nodo.
    3 null campo
    2 3 campo (qusto e il nuovo nodo) ; il puntatore precedente puntera al nodo 2 mentre quello successivo punterà al nodo 3. ciò perchè vogliamo inserire un nuovo nodo tra il 2 e il terzo.
    se hai qualche altra domanda chiedi
  • Re: Aggiungere un nodo ad una lista concatenata

    "campo" per cosa starebbe..?
  • Re: Aggiungere un nodo ad una lista concatenata

    Campo sarebbe il dato del nodo non ha molto senso costruire una lista solo con i puntatori!
    comunque campo sarebbe quello che tu chiami chiave.
  • Re: Aggiungere un nodo ad una lista concatenata

    Senti proprio non va, non è che puoi correggermi il codice? La teoria credo di averla capita, il problema sta nel renderla codice
  • Re: Aggiungere un nodo ad una lista concatenata

    Qui si corregge codice o si spiega come fare ma non si risolvono gli esercizi!
    non c'è codice da correggere!
    devi semplicemente aggiungere le parti che mancano.
    prima della chiamata alla funzione nuovo nodo fai accettare 2 interi per stabilire dove vuoi mettere il nuovo nodo.
    diciamo tra ed y
    allora nella funzione nuovo nodo devi:
    leggere la lista fino al nodo y
    all'interno del nodo letto modifichi il puntatore precedente con il valore del nuovo nodo.
    rileggi la lista fino al nodo tra
    all'interno del nodo letto modifichi il puntatore successivo con il valore del nuovo nodo.
    rileggi la lista fino al nuovo nodo
    puntatore precedente = tra
    puntatore successivo = y
    chiave = valore del nuovo nodo.
    e il gioco e fatto.
    per aiutarti con il codice da scrivere

    modifica la routine mostra lista
    mettendo una condizione che lo faccia fermare al nodo desiderato.
    fatti restituire i due puntatori.
    la funzione nuovo nodo la crei nel seguente modo:
    mostra lista modificata fino a y
    modifichi il puntatore precedente
    mostra lista modificata fino a tra
    modifichi puntatore successivo
    mostra lista modificata fino al nuovo nodo
    puntatore precedente = tra
    puntatore successivo = y
    chiave = valore del nodo.

    non è difficile
    io ti ho spiegato come fare adesso sta a te scrivere il codice.
  • Re: Aggiungere un nodo ad una lista concatenata

    Guarda ho letto il regolamento, ero solo disperata e ho provato a chiedere, non capendo.
    Grazie lo stesso.
Devi accedere o registrarti per scrivere nel forum
8 risposte