Академический Документы
Профессиональный Документы
Культура Документы
defined(_LISTAS_SIMPLES)
#define _LISTAS_SIMPLES
#include <stdio.h>
struct nodo {
tipo informacion;
nodo *siguiente;
};
struct listaSimple{
nodo *cabeza;
nodo *final;
};
/*
Nombre: esVacia (listaSimple *l)
Descripcion: Funcion que retorna TRUE cuando la lista "l"
esta vacia, o FALSE en otro caso
*/
bool esVacia (listaSimple *l){
return false;
}
/*
Nombre: inicializarLista():
Descripcion: Funcion que permite reservar memoria para una nueva
listaSimple, y establece los punteros cabeza y final el NULL
retorna un NULL en caso de error
*/
listaSimple* inicializarLista() {
l->cabeza=NULL;
l->final=NULL;
return l;
};
/*
Nombre: insertarPrincipio()
Descripcion: Funcion que permite insertar el "dato" en la lista "L"
al principio de la misma. Retorna TRUE si lo logra o FALSE
en otro caso
*/
bool insertarPrincipio(listaSimple *L, tipo dato){
if (L==NULL)
return false;
temp->informacion=dato;
temp->siguiente = L->cabeza;
L->cabeza=temp;
if (L->final==NULL)
L->final=temp;
return true;
}
/*
Nombre: insertarFinal(listaSimple *L, tipo dato)
Descripcion: Funcion que permite insertar el "dato" en la lista "L"
al final. Retorna TRUE si lo logra o FALSE en otro caso
*/
bool insertarFinal(listaSimple *L, tipo dato){
if (L==NULL)
return false;
temp->informacion=dato;
temp->siguiente = NULL;
if (L->final==NULL)
L->final=temp;
else {
L->final->siguiente=temp;
L->final=temp;
}
if (L->cabeza==NULL)
L->cabeza=temp;
return true;
/*
Nombre: insertarAntesDe(listaSimple *L, tipo dato, nodo *nodox)
Descripcion: Funcion que permite insertar el "dato" en la lista "L"
antes de "nodox"
*/
bool insertarAntesDe(listaSimple *L, tipo dato, nodo *nodox){
if (L==NULL)
return false;
if (nodox==NULL)
return false;
if (nodox==L->cabeza)
return insertarPrincipio (L,dato);
if (nodox==L->final)
return insertarFinal(L,dato);
temp->informacion=dato;
nodo *aux= L->cabeza;
while (aux->siguiente!=nodox)
aux=aux->siguiente;
if (aux==NULL)
return false;
temp->siguiente= aux->siguiente;
aux->siguiente=temp;
return true;
}
/*
Nombre: insertarDespuesDe(listaSimple *L, tipo dato, nodo *nodox)
Descripcion: Funcion que permite insertar el "dato" en la lista "L"
despues de "nodox"
*/
bool insertarDespuesDe(listaSimple *L, tipo dato, nodo *nodox){
if (L==NULL)
return false;
if (nodox==NULL)
return false;
if (nodox==L->cabeza)
return insertarPrincipio (L,dato);
if (nodox==L->final)
return insertarFinal(L,dato);
temp->informacion=dato;
temp->siguiente=nodox->siguiente;
nodox->siguiente=temp;
return true;
}
/*
Nombre: BuscarDato(listaSimple *l, tipo dato)
Descripcion: Funcion que retorna el nodo donde se cuenta el
"dato"
*/
nodo* BuscarDato(listaSimple *l, tipo dato){
if (esVacia(l))
return NULL;
/*
Nombre: cantNodos(listaSimple *l)
Descripcion: Funcion que retorna la cantidad de nodos que posee la lista
*/
int cantNodos(listaSimple *l){
/*
Nombre: eliminarPrincipio(listaSimple *l)
Descripcion: Funcion Elimina un nodo al principio de la lista
*/
bool eliminarPrincipio(listaSimple *l){
if (esVacia(l))
return false;
nodo *aux=l->cabeza;
l->cabeza=aux->siguiente;
delete aux;
return true;
}
/*
Nombre: eliminarFinal(listaSimple *l)
Descripcion: Funcion Elimina un nodo al final de la lista
*/
bool eliminarFinal(listaSimple *l){
if (esVacia(l))
return false;
// Si hay un solo nodo en la lista
if (l->cabeza==l->final){
delete l->final;
l->cabeza=NULL;
l->final=NULL;
return true;
}
nodo *aux=l->cabeza;
while (aux->siguiente!=l->final)
aux=aux->siguiente;
delete l->final;
aux->siguiente=NULL;
l->final=aux;
return true;
}
/*
Nombre: eliminarAntesDe(listaDoble *l, nodo *nodox)
Descripcion: Funcion que permite eliminar el nodo en la lista "l" antes de
"nodox"
*/
bool eliminarAntesDe(listaDoble *l, nodo *nodox){
if(l==NULL)
return false;
if(nodox==NULL)
return false;
if(nodox==l->cabeza)
return false;
if(nodox==l->cabeza->siguiente)
return eliminarPrincipio(l);
nodo *aux=l->cabeza;
while(aux->siguiente->siguiente!=nodox)
aux=aux->siguiente;
delete aux->siguiente;
aux->siguiente=nodox;
return true;
}
/*
Nombre: eliminarDespuesDe(listaDoble *l, nodo *nodox)
Descripcion: Funcion que permite eliminar el nodo en la lista "l" despues de
"nodox"
*/
bool eliminarDespuesDe(listaDoble *l, nodo *nodox){
if(l==NULL)
return false;
if(nodox==NULL)
return false;
if(nodox==l->final)
return false;
if(nodox->siguiente==l->final)
return eliminarFinal(l);
nodo *aux=nodox->siguiente;
nodox->siguiente=aux->siguiente;
delete aux;
return true;
}
if (esVacia(l))
return false;
while (!esVacia(l))
eliminarFinal(l);
delete l;
return true;
}
#endif