dudas sobre apuntadores en nodos

Nidhogg
06 de Julio del 2004
Tengo la duda del uso de apuntadores sobre un nodo ya que al parecer creo que empiezo a dudar un poco a la hora de indicar un nodo siguiente, puesto que al ir agregando nodos siempre reescribe en el mismo nodo . Por lo que no se si seria una molestia unos cuantos ejemplos de como usar nodos con apuntadores "->", "*" y "&"

xnomad
06 de Julio del 2004
Lo mas probable es que estes reutilizando el mismo nodo. La indireccion se marca con "->".

Normalmente, para agregar un nuevo nodo, a listas dinamicas, se utiliza la funcion new(nodo). Te mando algunos ejemplos para que veas como agregar, dependiendo del tipo de lista enlazada que utilices.

TIPOS:
struct tnodolista { //lista enlazada
int valor;
tnodolista *siguiente;
}
struct tnodolistad {//lista doblemente enlazada
int valor;
tnodolista *siguiente;
tnodolista *anterior;
}

struct tcola{// en colas, lo conveniente es tener dos punteros, uno al inicio y otro al final, para lograr el FCFS
tnodolista *head;
tnodolista *tail;
}

Para listas enlazadas podemos verlas como un único puntero de tipo tnodolista, pera seria mejor verlas como colas. Pilas es distinto, porque como siempre se agrega y quita del tope, un solo puntero basta.

Ej. Pila:
void agregar(tnodolistra *pila, int valor)
{
tnodolista *nuevo;
new(nuevo);
nuevo->valor = valor;
nuevo->siguiente = pila;// agrega al tope
pila = nuevo;
}

void quitar(tnodolistra *pila)
{
tnodolista *aux;
aux = pila;
pila = pila->siguiente;
dispose(aux);
}


Ej. Colas se agrega el final, se quita de enfrente

void agregar(tcola *cola, int valor) // simplemente enlazada
{
tnodolista *nuevo;
new(nuevo);
nuevo->valor = valor;
nuevo->siguiente =nil;
cola->tail->siguiente = nuevo; //apuntar siguiente de la cola al nuevo nodo
cola->tail = nuevo;// mover tail al ultimo nodo de la cola.
}

void quitar(tcola *cola) //simlemente enlazada
{
tnodolista *aux;
aux = cola->head;
cola->head = cola->head->siguiente;
dispose(aux);
}



void agregar(tcola *cola, int valor) // doblemente enlazada
{
tnodolistad *nuevo;
new(nuevo);
nuevo->valor = valor;
nuevo->siguiente =nil;
nuevo->anterior =cola->tail;
cola->tail->siguiente = nuevo; //apuntar siguiente de la cola al nuevo nodo
cola->tail = nuevo;// mover tail al ultimo nodo de la cola.
}

void quitar(tcola *cola) //doblemente enlazada
{
tnodolista *aux;
aux = cola->head;
cola->head = cola->head->siguiente;
cola->head->anterior = nil;
dispose(aux);
}


Espero te ayude!
Suerte.