PDA

Ver la versión completa : Listas enlazadas en c



Almorca
06-08-2004, 21:17
Estoy haciendo unas practicas y necesito crear una lista enlazada de datos del siguiente tipo:
typedef struct TipoCentral {
int id_central;
int estado; /*Esta variable va a comprobar si la central esta apagada o no */
/* Un 0 significa que la central está apagada y un 1 que está encendida. */
struct TipoCentral *siguiente; /* Apunta al siguiente nodo de la lista. */
} Central;

Lo que hago es crear una variable de tipo Central y un puntero que apunta a ella. El problema me surge cuando intento crear otra central ya que no puedo crear tantas variables de tipo Central como necesite.

¿Que hago para que pueda crear todos los nodos que quiera de la lista enlazada creando sólo una variable y un puntero de tipo Central?

No sé si me he explicado bien, pero espero que lo hayáis entendido.

KaoS
06-08-2004, 22:54
Te refieres a esto?:

#include <malloc.h>

#define encendido 1
#define apagado 0

struct TipoCentral{
int id_central;
int estado;
struct TipoCentral *siguiente;
};

struct TipoCentral* crearCentral();

int main(void)
{
struct TipoCentral* primero;

primero=crearCentral();
primero->siguiente = crearCentral();
primero->siguiente->estado=apagado;

return 0;
}

struct TipoCentral* crearCentral()
{
struct TipoCentral* nueva;
nueva = (struct TipoCentral*) malloc(sizeof(struct TipoCentral));
nueva->siguiente=NULL;
return nueva;
};

Así puedes ir añadiendo Elementos, los q t d la gana

P.D.Si sta mal dadme un toke que yo soy d C++ y no stoy mu puesto tp

un Saludo,
KaoS

Almorca
07-08-2004, 12:33
Toy tonto, esta mañana me he dado cuenta de que lo que tenía que usar era la reserva de memoria dinámica (se entera de este lapsus mi profesor y me pone un cero como una catedral).

Lo he solucionado asi:

// Reserva memoria para tantas centrales como definamos en N
Central *crearCentrales(int N)
{
int i = 1;
Central *pCentral, *pCentralAux, *pCentralAux2;


pCentral = (Central *)malloc(sizeof(Central));
if (pCentral == NULL)
return NULL;
pCentral->id_central = 1;
pCentral->siguiente = NULL;
pCentral->estado = 1;

if (N >= 2)
{
pCentralAux = (Central *)malloc(sizeof(Central));
if (pCentralAux == NULL)
return NULL;

i++;

pCentralAux->id_central = i;
pCentralAux->estado = 1;
pCentralAux->siguiente = NULL;

pCentral->siguiente = pCentralAux;
}


while (i < N)
{
pCentralAux2 = (Central *)malloc(sizeof(Central));
if (pCentralAux2 == NULL)
return NULL;

i++;

pCentralAux2->id_central = i;
pCentralAux2->estado = 1;
pCentralAux2->siguiente = NULL;

pCentralAux->siguiente = pCentralAux2;
pCentralAux = pCentralAux2;
}

pCentralAux->siguiente = pCentral;

return pCentral;
}