Newsgroup: it.comp.lang.c
Titolo: Liste doppiamente linkate

    Salve a tutti... voglio fare un prog. in C cosi' fatto... Una lista
composta da elementi ciascuno linkato verso il next ed il previous... ogni
elemento voglio che sia una struct contenente un int ed una stringa (array
di char)...
    Voglio scrivere e cancellare chiavi scorrendo la lista...
    Grazie a tutti...


perche' non pensi al C++, dove liste e stringhe sono gia' fatte??
bye!
-- 
Emanuele Cesena                 
http://www.penguinpowered.com/~ecesena
ece...@penguinpowered.com
                 Attenti all'antispam NOSPAM
"Quando c'e' bisogno di toccar ferro o legno, ci si accorge che il mondo e'
fatto di alluminio e vinile", legge di Flugg

you wrote :
#perche' non pensi al C++, dove liste e stringhe sono gia' fatte??
Perche' non pensare al C dove bisogna farle e rimanere IT ? ;)
Sarebbe bene testare il seguente codice, perche' non l'ho provato ;)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _item {
                        char * string ;
                        int n ;
                        struct _item * next ;
                        struct _item * prev ;
                     } * item_p ;
void inserisci ( item_p * p, const char * s, int n )
{
     item_p t ;
     t->string = malloc( strlen( s ) + 1 ) ;
     strcpy ( t->string, s ) ;
     t->n = n ;
     t->next = NULL ;
     t->prev = NULL ;
     if ( NULL == *p )
        *p = t ;
     else
     {
        t->next = (*p)->next ;
        (*p)->next = t ;
        t->previous = *p ;
     }
}
void cancella( item_p * p )
{
     item_p t ;
     if ( ( *p ) != NULL )
     {
        t = (*p)->next ;
        if ( (*p)->previous != NULL )
        {
           (*p)->previous->next = t
           free( *p ) ;
        }
        else 
        {
           free( *p ) ;
           *p = t ;
        }
     }
}
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------




 wrote:
[ snip ]
AL>Sarebbe bene testare il seguente codice, perche' non l'ho provato ;)
Parole sante 8-P
[ snip ]
AL>typedef struct _item {
AL>                        char * string ;
AL>                        int n ;
AL>                        struct _item * next ;
AL>                        struct _item * prev ;
                                          ^^^^
Questo puntatore alle volte lo chiami 'previous'. 8)
AL>                     } * item_p ;
AL>void inserisci ( item_p * p, const char * s, int n )
AL>{
AL>     item_p t ;
Qui ti sei dimenticato
	t = malloc(sizeof *t);
AL>     t->string = malloc( strlen( s ) + 1 ) ;
[ snip ]
AL>     else
AL>     {
AL>        t->next = (*p)->next ;
AL>        (*p)->next = t ;
AL>        t->previous = *p ;
I puntatori sono quattro
           if(t->next)
	   	t->next->previous = t;
AL>     }
AL>}
AL>void cancella( item_p * p )
[ snip ]
Orribilmente piena di errori. ;)
In generale, l'algoritmo dovrebbe essere del tipo:
void cancella(item_p p)
{
	if(p) {
		if (p->next)
			p->next->prev = p->prev;
		if (p->prev)
			p->prev->next = p->next;
		if(p->string)
			free(p->string);
		free(p);
	}
} 
<NO_FLAME>
Sinceramente, mi chiedo se ha senso postare del codice cosi'
buggato. Dubito che possa servire a un principiante, e ad un
esperto meno che mai... 8-?
<\NO_FLAME>
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

 
a quanto hai detto neanche il C... tanto vale scegliere quello migliore :-)
bye!
-- 
Emanuele Cesena                 
http://www.penguinpowered.com/~ecesena
ece...@penguinpowered.com
                 Attenti all'antispam NOSPAM
"Il potere logora chi non ce l'ha", teorema di Andreotti sugli Equilibri
Politici

#<NO_FLAME>
#Sinceramente, mi chiedo se ha senso postare del codice cosi'
#buggato. Dubito che possa servire a un principiante, e ad un
#esperto meno che mai... 8-?
#<\NO_FLAME>
Grazie della correzione.
In generale, il perche' del postare codice in un ng e' quello di
offrire un'idea di partenza su come eseguire determinate operazioni.


 wrote:
[ snip ]
AL>Grazie della correzione.
Di nulla.
AL>In generale, il perche' del postare codice in un ng e' quello di
AL>offrire un'idea di partenza su come eseguire determinate operazioni.
D'accordo, ma ammetterai che (per fare un esempio assurdo ;) una
manciata di righe scritte a caso non sono molto utili 8-P


you wrote :
#D'accordo, ma ammetterai che (per fare un esempio assurdo ;) una
#manciata di righe scritte a caso non sono molto utili 8-P
Accidenti ! e io che speravo che non si notasse che i programmi li
scrivo con un generatore di codice random !...
