--------------------------------------------
archivo libListas.h
--------------------------------------------
/*
Name: Alejandro Garcia
Copyright: GPL
Author: Alejandro Garcia
Date: 18/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
**/
class Elemento{
public:
//Variables de clase con acceso publico
Elemento *siguiente;
Elemento *anterior;
int dato;
//constructor
Elemento(Elemento *n,Elemento *a, int d){
Elemento::siguiente=n;
Elemento::dato=d;
Elemento::anterior=a;
}
};
/**
* Funcion insertarElementoAlFinal esta permite insertar un elemento
* al final 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
**/
Elemento* insertarElementoAlFinal(Elemento *nodo,int dato){
//declaracion de la instanciacion de la clase Elemento
Elemento *anterior = NULL;
if(nodo==NULL){
// Asignamos a lista un nuevo nodo
nodo = new Elemento(NULL,NULL,dato);
}else{
//en caso contrario se le crea otro nodo a la lista
anterior = nodo;
nodo->siguiente = new Elemento(NULL,anterior,dato);
nodo = nodo->siguiente;
}
return nodo;
}
/**
* Funcion irAPrimerElemento Esta funcion desplaza al programa
* al primer nodo o Elemento de la lista y retorna el nodo.
**/
Elemento* irAPrimerElemento(Elemento *nodo){
//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
**/
Elemento* moverseDeElemento(Elemento *nodo){
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
**/
Elemento* insertarElementoAlPrincipio(Elemento *nodo,int dato){
Elemento *anterior = NULL;
// 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(NULL,NULL,dato);
}else{
//en caso contrario se le crea otro nodo a la lista
anterior = nodo;
nodo->anterior = new Elemento(anterior,NULL,dato);
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
**/
Elemento* eliminarElemento(Elemento *nodo){
//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
**/
Elemento* buscarElemento(Elemento *nodo,int dato){
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: 18/10/2009 19:42
Description: libreria que trabaja con listas doblemente enlazadas
*/
#include
//incluyendo la libreria para trabajar con listas doblemente enlazadas
#include "libListas.h"
using namespace std;
int main(){
//Creando variables y punteros de tipo Elemento
Elemento *nodo=NULL,*nodoaux=NULL;
int salir=0,entrada=0,i=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 <<>
No hay comentarios:
Publicar un comentario