PDA

Visualizza la versione completa : [c] cancellazione liste concatenate


maninblack
05-02-2005, 17:02
ciao a todos..ho bisogno di un consiglio.
Ho una struttura "liste di liste" ,dove sulla lista principale ci sono delle parole,mentre nelle relative sottoliste ho delle altre parole che iniziano per la stessa lettera.
Per intenderci, sotto il nodo dove e' contenuto la parola "cane" avro' tutte e sole le parole che iniziano con la "c".
Il prob e' di Come fare a cancellare 1 nodo principale , come quello che contiene "cane" e a non perdere tutta la sottolista relativa????
Cioe' come faccio a far salire il nodo sottostante a "cane" al posto di esso?????

anx721
05-02-2005, 17:55
bisogna vedere come vuoi effettuare la cancellazione; se la vuoi fare con una funzione che prende il puntatore al nodo da cancellare, allora devi passare il puntatore al puntatore al nodo in modo da farlo puntare all'elemento successivo:

void cancella(tipolista** p){
*p = *p ->next;
}

maninblack
05-02-2005, 18:16
Il fatto e' che il nodo da cancellare e' sulla lista principale e voglio far diventare il nuovo nodo al posto di quello cancellato, il primo sottostante nella sua sottolista.Quindi far salire la sottolista di 1 livello tanto x intenderci.
Ma nn so' come fare!! xke' so' come cancellare un nodo su un 'unica lista ma qui il discorso e' diverso!!!

anx721
05-02-2005, 18:21
ma se hai il puntatore al nodo testa della lista principale sei ingrado di scorrere tale lista fino al nodo che precede quello da cancellare e quindi collegare il precedente con il successivo del cancellato

maninblack
05-02-2005, 18:28
Si ma io accedo alla mia sottolista dal mio nodo principale con l'istruzione "i->p" ,dove "i" e' il puntatore al nodo principale e "r" e' il puntatore alla sottolista.Quindi se cancello il nodo sulla lista principale, come faccio il collegamento con la sua sottolista?Per collegarlo con i puntatori adiacenti sulla lista principale lo so fare ma x la sua sottolista nn so come fare!!!

anx721
05-02-2005, 18:30
ma i nodi sulla lista principale sono delos tesso tipo di quelli delle sottoliste? dacci la definizione dei tipi..comqunue devi semplicemnte mantenerti i puntatori agli elementi precedenti...

maninblack
05-02-2005, 18:33
La struttura e' questa:

//struttura per le sottoliste collegate a ogni nodo della lista principale
typedef struct _parola
{
int flagMist;
char word[MAXSTRING];
struct _parola *next;
struct _parola *prev;

}parola;

//struttura della lista principale
typedef struct _index
{
int flagMistI;
char wordI[MAXSTRING];
parola *p;
struct _index *next;
struct _index *prev;

}index;

typedef index index1; //definizione della seconda lista principale
typedef parola parola1; //definizione della seconda struttura per le sottoliste

index *inizioI=NULL; //puntatore all'inizio della prima lista principale
parola *inizioP=NULL; //puntatore all'inizio della prima struttura lista di liste

index1 *inizioI1=NULL; //puntatore all'inizio della seconda lista principale
parola1 *inizioP1=NULL; //puntatore all'inizio della seconda struttura lista di liste

anx721
05-02-2005, 18:41
se vuoi cancellare il primo nodo di una sttolista di index, scorri index fino all'elemento che contiene la sottolista di cui cancellare la testa, sia questo tmp, quindi fai:

parola *ptmp = tmp -> p;
tmp -> p = tmp -> p -> next;
if(tmp -> p != NULL)
tmp -> p -> prev = null;
free(ptmp);

maninblack
05-02-2005, 18:45
ok adesso provo..t faccio sapere, cmq vada t ringrazio gia' in anticipo

maninblack
05-02-2005, 18:56
il codice funziona ma io voglio cancellare un nodo della mia lista principale "index". E' questo il prob! E credo sia anche complicato farlo..Come faccio?

Loading