--------------------------------------------
archivo libListas.h
--------------------------------------------
/*
Name: Alejandro Garcia
Copyright: GPL
Author: Alejandro Garcia
Date: 21/10/2009 19:42
Description: libreria que trabaja con listas doblemente enlazadas
*/
/**
* Clase elemento esta trabaja parecido a un estructura en c
* esta contiene dos punteros(siguiente,anterior) y la variable dato
* ojo si se quiere tener mas datos solo se tiene que agregar mas variables
**/
template
class Elemento{
public:
//Variables de clase con acceso publico
Elemento
Elemento
T dato;
//constructor
Elemento(Elemento *n,Elemento *a,T d){
Elemento::siguiente=n;
Elemento::dato=d;
Elemento::anterior=a;
}
};
template
Elemento
//declaracion de la instanciacion de la clase Elemento
Elemento
if(nodo==NULL){
// Asignamos a lista un nuevo nodo
nodo = new Elemento
}else{
//en caso contrario se le crea otro nodo a la lista
anterior = nodo;
nodo->siguiente = new Elemento
nodo = nodo->siguiente;
}
return nodo;
}
/**
* Funcion irAPrimerElemento Esta funcion desplaza al programa
* al primer nodo o Elemento de la lista y retorna el nodo.
**/
template
Elemento
//bucle que regresa la posicion del programa
//al primer nodo de la lista
while(nodo->anterior!=NULL){
nodo=nodo->anterior;
}
return nodo;
}
/**
* Funcion moverseDeElemento Esta funcion desplaza al programa
* una posicion adelante en la lista de nodos o elementos
* y retorna la nodo al que se posiciono
**/
template
Elemento
if(nodo->siguiente!=NULL){
nodo=nodo->siguiente;
return nodo;
}
return nodo;
}
/**
* Funcion insertarElementoAlPrincipioesta permite insertar un elemento
* al Principio de la lista la cual recibe el puntero a nodo y el dato a insertar
* y retorna el puntero a la lista de nodos o Elementos resultante
**/
template
Elemento
Elemento
// Si la lista esta vacia
if(nodo==NULL){
// Asignamos a lista un nuevo nodo de valor v y
// cuyo siguiente elemento es la lista actual
nodo = new Elemento
}else{
//en caso contrario se le crea otro nodo a la lista
anterior = nodo;
nodo->anterior = new Elemento
nodo = nodo->anterior;
}
return nodo;
}
/**
* Funcion eliminarElemento Esta funcion se encarga de eliminar
* un elemento de la lista modificando los apuntadores de la lista
* que esta siendo apuntada por el puntero de nodo si en dado caso la lista
* solo tiene un elemento el puntero nodo pasara a apuntar a NULL
* y por ultimo el puntero nodo es retornado
**/
template
Elemento
//cambiando los punteros del Elemento nodo para su eliminacion
if((nodo->siguiente==NULL) && (nodo->anterior!=NULL)){
nodo->anterior->siguiente=NULL;
nodo=nodo->anterior;
}else if((nodo->anterior==NULL) &&(nodo->siguiente!=NULL)){
nodo->siguiente->anterior=NULL;
nodo=nodo->siguiente;
}else if((nodo->siguiente!=NULL) && (nodo->anterior!=NULL)){
nodo->anterior->siguiente=nodo->siguiente;
nodo->siguiente->anterior=nodo->anterior;
}else if((nodo->anterior==NULL) && (nodo->siguiente==NULL)){
return NULL;
}
return nodo;
}
/**
* Funcion buscarElemento Esta recibe la lista apuntada por nodo
* y el dato de busqueda si es encontrado retorna el nodo que contiene el dato
* si no retorna un NULL
**/
template
Elemento
while(nodo!=NULL){
//si el elemento buscado coincide con el dato
//para la busqueda retorna el nodo con ese dato
if(nodo->dato==dato){
return nodo;
}
if(nodo->siguiente==NULL) break;
nodo=nodo->siguiente;
}
return NULL;
}
--------------------------------------------
--------------------------------------------
archivo lista.cpp
--------------------------------------------
/*
Name: Alejandro Garcia
Copyright: GPL
Author: Alejandro Garcia
Date: 21/10/2009 19:42
Description: libreria que trabaja con listas doblemente enlazadas
*/
#include
using namespace std;
//incluyendo la libreria para trabajar con listas doblemente enlazadas
#include "libListas.h"
int main(){
//el tipo de dato que usa en este momento el Elemento o nodo es char
Elemento
int salir=0,i=0;
//ojo aqui con el tipo de dato que usa el Elemento
int entrada=0;
//Ejemplo de insercion de datos en una lista enlazada
while(!salir){
entrada=0;
cout << "Ingrese un elemento o nodo a la lista de tipo entero:"; cin >> entrada;
nodo = insertarElementoAlFinal(nodo,entrada);
cout << "desea salir 1=s/0=n: "; cin >> salir;
}
//Ejemplo de la impresion de una lista en pantalla
//regresando al primer nodo
nodo=irAPrimerElemento(nodo);
cout << "Los Datos Ingresados en la Lista son:" <<>dato <<>siguiente==NULL) break;
//funcion que hace saltar de nodo al programa
nodo=moverseDeElemento(nodo);
}
//Ejemplo de eliminacion de un nodo o Elemento
cout <<>> entrada;
//regresando al primer nodo
nodo=irAPrimerElemento(nodo);
nodoaux=nodo; //realizando una copia del nodo
//usando la funcion de busqueda
nodoaux=buscarElemento(nodoaux,entrada);
if(nodoaux!=NULL){
nodo = eliminarElemento(nodoaux);
cout << "Elemento Eliminado " << nodo="irAPrimerElemento(nodo);" i="0;">dato <<>siguiente==NULL) break;
//funcion que hace saltar de nodo al programa
nodo=moverseDeElemento(nodo);
}
}else{
cout <<>