gepeppe
01-05-2006, 12:00
ciao a tutti...
devo creare una lista linked list bidirezionale...in cui next ha l'indirizzo del "nodo" successivo e previous quello del "nodo" precedente...ed inoltre head rappresenta la "testa" della lista e rear la "coda", cioè l'ultimo elemento.
l'idea è più o meno questa:
http://img388.imageshack.us/my.php?image=immagine0nu.jpg
adesso nn so cm fare a passare il valore di rear, a poterlo "usare" nel main....nn so se sn stato chiaro, ma credo dall'immagine si capisca bene!
ecco il codice della versione iterativa:
#include <stdio.h>
#include <stdlib.h>
typedef char DATA;
struct linked_list {
DATA d;
struct linked_list *next;
struct linked_list *previous;
};
typedef struct linked_list ELEMENT;
typedef ELEMENT *LINK;
LINK creazione_lista_bid(char s[])
{
LINK head = NULL, rear , tail, prev;
int i;
if (s[0] != '\0') /*primo elemento*/
{
head = malloc(sizeof(ELEMENT));
head -> d = s[0];
head -> previous = NULL;
tail = head;
/*aggiungi in coda*/
for (i = 1; s[i] != '\0'; ++i)
{
tail -> next = malloc(sizeof(ELEMENT));
prev = tail;
tail = tail -> next;
tail -> d = s[i];
tail -> previous = prev;
}
tail -> next = NULL;
rear = tail;
}
return head;
}
int main(int argc, char *argv[])
{
LINK a, b;
int temp, temp2;
a = creazione_lista_bid("casa");
/*controllo i valori*/
temp = a -> next -> d;
temp2 = a -> next -> next -> next -> previous -> d;
printf("%c\n", temp);
printf("%c\n", temp2);
system("PAUSE");
return 0;
}
devo creare una lista linked list bidirezionale...in cui next ha l'indirizzo del "nodo" successivo e previous quello del "nodo" precedente...ed inoltre head rappresenta la "testa" della lista e rear la "coda", cioè l'ultimo elemento.
l'idea è più o meno questa:
http://img388.imageshack.us/my.php?image=immagine0nu.jpg
adesso nn so cm fare a passare il valore di rear, a poterlo "usare" nel main....nn so se sn stato chiaro, ma credo dall'immagine si capisca bene!
ecco il codice della versione iterativa:
#include <stdio.h>
#include <stdlib.h>
typedef char DATA;
struct linked_list {
DATA d;
struct linked_list *next;
struct linked_list *previous;
};
typedef struct linked_list ELEMENT;
typedef ELEMENT *LINK;
LINK creazione_lista_bid(char s[])
{
LINK head = NULL, rear , tail, prev;
int i;
if (s[0] != '\0') /*primo elemento*/
{
head = malloc(sizeof(ELEMENT));
head -> d = s[0];
head -> previous = NULL;
tail = head;
/*aggiungi in coda*/
for (i = 1; s[i] != '\0'; ++i)
{
tail -> next = malloc(sizeof(ELEMENT));
prev = tail;
tail = tail -> next;
tail -> d = s[i];
tail -> previous = prev;
}
tail -> next = NULL;
rear = tail;
}
return head;
}
int main(int argc, char *argv[])
{
LINK a, b;
int temp, temp2;
a = creazione_lista_bid("casa");
/*controllo i valori*/
temp = a -> next -> d;
temp2 = a -> next -> next -> next -> previous -> d;
printf("%c\n", temp);
printf("%c\n", temp2);
system("PAUSE");
return 0;
}