sobre listas dinamicas
ola tengo esta funcion de listas dinamicas
esvacia (*lista)
{
if (vacio == NULL)
return (1);
else
return (0);
}
komo supongo ke sabreis es ke devuelve 1 si esta inicializada a NULL y 0 si no esta inicializada
y lo ke kiero ke me devuelva es 1-inicializada 0-no inicializada ni creada 2-esta llena o con datos
esta funcion me devuelve lo mismo si esta llena komo si no esta nisikiera kreada
pense en mirar algun miembro de lista, pero me da error en el kaso de no estar kreada aun
(lista->miembro == algo) error y parada de ejekucion
pues mi pregunta es komo solucionar esto
osea ke me devuelva 0 kuando sepa kon certeza ke no esta kreada y 2 kuando sepa ke tiene algo ke no sea NULL
alomejor existe alguna funcion ke pueda anticiparse a los errores y ke devuelva true o false
if ( akcesible (lista->miembro) == 0)
return 0;
else
return 1;
muchas gracias de antemano
esvacia (*lista)
{
if (vacio == NULL)
return (1);
else
return (0);
}
komo supongo ke sabreis es ke devuelve 1 si esta inicializada a NULL y 0 si no esta inicializada
y lo ke kiero ke me devuelva es 1-inicializada 0-no inicializada ni creada 2-esta llena o con datos
esta funcion me devuelve lo mismo si esta llena komo si no esta nisikiera kreada
pense en mirar algun miembro de lista, pero me da error en el kaso de no estar kreada aun
(lista->miembro == algo) error y parada de ejekucion
pues mi pregunta es komo solucionar esto
osea ke me devuelva 0 kuando sepa kon certeza ke no esta kreada y 2 kuando sepa ke tiene algo ke no sea NULL
alomejor existe alguna funcion ke pueda anticiparse a los errores y ke devuelva true o false
if ( akcesible (lista->miembro) == 0)
return 0;
else
return 1;
muchas gracias de antemano
esvacia (*lista)
{
if (vacio == NULL)
return (1);
else
return (0);
}
supongo que te refieres a
esvacia (*lista)
{
if (lista == NULL)
return (1);
else
return (0);
}
si es asi esto deberia funcionar, la unica precaucion es que el puntero a lista este iniciado como null si es que esta vacio.
{
if (vacio == NULL)
return (1);
else
return (0);
}
supongo que te refieres a
esvacia (*lista)
{
if (lista == NULL)
return (1);
else
return (0);
}
si es asi esto deberia funcionar, la unica precaucion es que el puntero a lista este iniciado como null si es que esta vacio.
lo siento pero kreo ke no me has entendido
la funcion ke busko es algo asi
esvacia(ficha *lista)
{
if (lista == NULL) /// EN EL KASO DE KE ESTE INICIALIZADA
return 0;
if (contiene_algo(lista) = 1 // EN EL KASO DE KE KONTENGA ALGO KE NO SEA NULL
return 1;
if (contiene_algo(lista)=0)// EN EL KASO DE KE NO ESTE NI INICIALIZADA NI ESTE LLENA
return -1;
}
ESTO DARIA ERROR EN EL KASO DE KE NO SE HAYA INICIALIZADO NI KREADO
PORKE SE INTENTA AKCEDER A UN MIEMBRO KE NO SE HA RESERVADO ESPACIO
Y LO KE KIERO ES KE ME DIGA SI NO ESTA NI INICIALIZADO NI KREADO
contiene_algo(ficha *lista)
{
if( lista->val != NULL)
return 1;
return 0;
}
ESPERO KE SE ME ENTIENDA LO KE BUSKO PORKE ME ESTOY HACIENDO UN LIO EXPLIKANDOLO
DE TODAS FORMAS MUCHAS GRACIAS
la funcion ke busko es algo asi
esvacia(ficha *lista)
{
if (lista == NULL) /// EN EL KASO DE KE ESTE INICIALIZADA
return 0;
if (contiene_algo(lista) = 1 // EN EL KASO DE KE KONTENGA ALGO KE NO SEA NULL
return 1;
if (contiene_algo(lista)=0)// EN EL KASO DE KE NO ESTE NI INICIALIZADA NI ESTE LLENA
return -1;
}
ESTO DARIA ERROR EN EL KASO DE KE NO SE HAYA INICIALIZADO NI KREADO
PORKE SE INTENTA AKCEDER A UN MIEMBRO KE NO SE HA RESERVADO ESPACIO
Y LO KE KIERO ES KE ME DIGA SI NO ESTA NI INICIALIZADO NI KREADO
contiene_algo(ficha *lista)
{
if( lista->val != NULL)
return 1;
return 0;
}
ESPERO KE SE ME ENTIENDA LO KE BUSKO PORKE ME ESTOY HACIENDO UN LIO EXPLIKANDOLO
DE TODAS FORMAS MUCHAS GRACIAS
FUNCIONES DE LA PRACTIKA <MENU>
1 INICIALIZAR LISTA
2 ESVACIA
3 INSERTAR
4 ULTIMA POSICION
.....
PEKEÑA TRAZA
LE DOY AL 1 >> SE INICIALIZA LA LISTA
LE DOY AL 2>> ME MIRA KE ESTA INICIALIZADA
LE DOY AL 4>> KOMO VE KE ESTA INICIALIZADA A NULL NO DEJA SEGUIR (SOLO DEJARÁ KUANDO ESVACIA(LISTA) DEVUELVA ALGO DISTINTO A 0, OSEA LISTA DISTINTO A NULL)
LE DOY AL 3>>INSERTA NODO A LISTA
LE DOY A 2>> ME DICE KE NO ESTA INICIALIZADO PORKE AHORA LISTA ES DIFENRENTE A NULL
LE DOY A 4>> AHORA SI KE ME DEJA PORKE LISTA ES DIFENRENTE A A NULL
AHORA OTRA TRAZA
2>>ES DIFERENTE A NULL POR LO KE ME DICE KE NO ESTA INICIALIZADO
4>>ERROR!!! INTENTA AKCEDER A UN MIEMBRO NO KREADO, AKI ME DEJA PASAR PORKE LISTA ES DIFERENTE A NULL
3>>LO MISMO
ENTIENDES?
UNA SOLUCION UN POKO INSANA KE HE ECHO ES PONER UNA VARIABLE = 0 Y DESPUES DE PASAR POR LA FUNCION INICIALIZAR SE KAMBIE A 1
EN TODAS LAS FUNCIONES HE PUESTO ESTE FILTRO
IF (VARIABLE == 0)
{PUTS("PRIMERO INICIALIZA");BREAK;}
FUNCION();
LO KE KIERO ES KE ME DEVUELVA LA FUNCION ESVACIO()
0>>SI ESTA INICIALIZADA
1>>SI ESTA INICIALIZADA Y KON ALGUN ELEMENTO
-1>>NINGUNO DE LOS DOS KASOS
BUENO GRACIAS POR LA ATENCION PRESTADA
UN SALUDO
Se me ocurre, que uses esa misma variable "insana" como contador de los nodos de la lista, que estableces por defecto en el constructor del nodo a -1, cuando inicias lo pones a 0 y luego cada vez que pases por la funcion de insercion aumentes en uno su valor.
Esa variable te dira si se ha iniciado (insana != -1) y en caso de que esto no sea cierto su valor te indica los la cantidad de nodos de la lista
tu funcion:
funcion (*lista)
{
if(lista->insana != -1)//si esta iniciada
{
if(lista->insana)//si no es 0
return (con elementos)
else
return (iniciada sin elementos)
}
else
return (no iniciada)
}
aunque de hecho no necesitas esta funcion, solo con que accedas a la variable insana ya tienes el resultado
-1=no iniciado
0=vacia
>0=con elementos
a ver si asi
Esa variable te dira si se ha iniciado (insana != -1) y en caso de que esto no sea cierto su valor te indica los la cantidad de nodos de la lista
tu funcion:
funcion (*lista)
{
if(lista->insana != -1)//si esta iniciada
{
if(lista->insana)//si no es 0
return (con elementos)
else
return (iniciada sin elementos)
}
else
return (no iniciada)
}
aunque de hecho no necesitas esta funcion, solo con que accedas a la variable insana ya tienes el resultado
-1=no iniciado
0=vacia
>0=con elementos
a ver si asi
es buena tu idea pero no funcionara en estos kasos
si la inicializo opcion 1>> lista == NULL osea a ninguna parte de la memoria por lo ke el valor lista->insana nisikiera se podra akceder ya ke daria error
asi ke me kedo kon mi solucion ke es simplemente una variable ke no tiene nada ke ver kon lista, aunke me kedo kon la idea esa, porke tambien tengo una funcion ke me pide la longitud de la lista
solo tendria ke meterla por referencia en la funcion insertar
INSERTAR (ficha *lista, &insana);
ya se ke no hace falta pasarla por la funcion, ke kon inkrementarle a kontinuacion de la funcion sobra, pero kieren todas las operaciones en las funciones
bueno dejo zanjado este lio ke hemos hecho entre los dos
un saludo y mil gracias
TAKYO
si la inicializo opcion 1>> lista == NULL osea a ninguna parte de la memoria por lo ke el valor lista->insana nisikiera se podra akceder ya ke daria error
asi ke me kedo kon mi solucion ke es simplemente una variable ke no tiene nada ke ver kon lista, aunke me kedo kon la idea esa, porke tambien tengo una funcion ke me pide la longitud de la lista
solo tendria ke meterla por referencia en la funcion insertar
INSERTAR (ficha *lista, &insana);
ya se ke no hace falta pasarla por la funcion, ke kon inkrementarle a kontinuacion de la funcion sobra, pero kieren todas las operaciones en las funciones
bueno dejo zanjado este lio ke hemos hecho entre los dos
un saludo y mil gracias
TAKYO