PDA

Visualizza la versione completa : [C] liste concatenate che come dati hanno ancora liste


lallac
19-06-2008, 15:14
Ciao a tutti, volevo sapere se era possibile una cosa di questo genere:
volevo creare una lista concatenata doppia che come dato per ogni cella abbia un puntatore ad un'altra lista di 6 elementi ma non tutti dello stesso tipo.
Con questo metodo poi riesco a inserire un dato in una particolare posizione di una sotto lista? O forse sarebbe meglio utilizzare una struttura? HELP!
Lo so sono complicata! :D grazie mille! Buona giornata!

lallac
20-06-2008, 11:21
UP!!

mondobimbi
20-06-2008, 11:36
Originariamente inviato da lallac
...
Con questo metodo poi riesco a inserire un dato in una particolare posizione di una sotto lista?

certamente


O forse sarebbe meglio utilizzare una struttura?

una lista è già una struttura.


dovresti almeno buttare giù la definizione delle due strutture, così vediamo i tipi che vuoi trattare.
ciao
sergio

lallac
20-06-2008, 11:40
allora la prima lista mi serve solo come contenitore deve avere il puntatore all'elemento precedente e a quello successivo e il dato interno mi piacerebbe fosse un numero progressivo che identifica la lista collegata.
Nella lista collegata io ho 5 campi di cui 4 sono interi e rappresentano delle coordinate e uno è una stringa.
Per questo dicevo se nn era meglio usare una struct invece che una lista...

mondobimbi
20-06-2008, 12:04
qualcosa del genere ?


#include <stdio.h>

typedef struct _Container {

unsigned short counter;

struct _Coordinata *data ;

struct _Container *next;
struct _Container *prev;

} Container ;

typedef struct _Coordinata {

unsigned short x1;
unsigned short x2;
unsigned short x3;
unsigned short x4;

char * str ;

struct _Coordinata *next;


} Coordinata ;


int main ()
{

return ( 0 );
}



ciao
sergio

lallac
20-06-2008, 12:08
si potrebbe andare ho solo una domanda....la lista "coordinate" non è una lista doppia...giusto? se io dovessi modificare un parametro in coda una volta inserita potrei farlo lo stesso?

mondobimbi
20-06-2008, 12:21
se implementarlo come lista doppia dipende da te.
Tieni presente che la lista doppia occupa più memoria ma puoi, chiaramente, visitare a ritroso la lista.
Per quanto riguarda inserimenti, cancellazioni e modifiche sono possibili su tutte e due le implementazioni con algoritmi ben collaudati.
ciao
sergio

lallac
20-06-2008, 14:24
Ok nel caso una volta che ho scritto il codice posso fartelo vedere così mi dici se secondo te c'è qualcosa che nn va?ti ringrazio tanto!buona giornata

lallac
20-06-2008, 14:37
senti io ho trovato questo codice secondo te posso adattarlo alle mie liste??



function insertAfter(List list, Node node, Node newNode)
newNode.prev := node
newNode.next := node.next
if node.next = null
list.lastNode := newNode
else
node.next.prev := newNode
node.next := newNode


questo per la lista contenitore, ovviamente devo riadattarla alla mia lista, questa è definita così:



record Node {
data // I dati da immagazzinare nel nodod
next // Un puntatore al nodo successivo; null per l'ultimo nodo
prev // Un puntatore al node precedente; null per il primo nodo
}

record List {
Node firstNode // punta al primo nodo della lista; null per liste vuote
Node lastNode // punta all'ultimo nodo della lista; null per liste vuote
}


per la lista delle coordinate ho trovato queste operazioni:



function insertAfter(Node node, Node newNode) { // inserisce newNode dopo node
newNode.next := node.next
node.next := newNode
}

definita così



record Node {
data // I dati da memorizzare nel nodo
next // Un riferimento al nodo successivo; null per l'ultimo nodo
}

record List {
Node firstNode // punta al primo nodo della lista; null per una lista vuota
}



posso usarle con le definizioni che mi hai dato te? come le devo modificare? grazie mille!!!

mondobimbi
20-06-2008, 18:39
le operazioni che devi fare sono

-aggiungere un nuovo contenitore
-cancellare un contenitore
-aggiungere nuovi dati ad un contenitore
-modificare i dati in un contenitore
-cancellare i dati da un contenitore

per ciascuno di questi punti devi scrivere una funzione che faccia quello che è descritto.
Mi dovresti però spiegare meglio cosa vuoi fare.
ciao
sergio

Loading