comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[ESTRUCTURA DE DATOS] Listas doblemente ligadas [C++]

  • 1 Respuestas
  • 5346 Vistas

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado 2Fac3R

  • *
  • Underc0der
  • Mensajes: 232
  • Actividad:
    3.33%
  • Reputación 0
  • Why be a king, when you can be a god
    • Ver Perfil
    • Escuela de Hackers & Programación
  • Skype: rockeg_18
  • Twitter: @2Fac3R
« en: Octubre 17, 2014, 03:46:12 pm »
Buenas!

Resulta que he estado estudiando en la universidad las estructuras de datos en C++, y me gustaría compartirles algunos códigos que he estado haciendo en este tiempo, son códigos más que nada de la escuela. He buscado información al respecto en internet, y la mayoria (por no decir todos) están hechos en C (los que he visto en español), utilizan estructuras con struct y no objetos en C++, así que sirve que alimentamos el internet y el foro  ;D .

No les voy a mostrar teoría sobre el tema, eso se los dejo a su búsqueda.

listas.h
Código: C++
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. #ifndef __LISTAS_H_INCLUDED__
  6. #define __LISTAS_H_INCLUDED__
  7.  
  8. class Nodo{
  9.  
  10. private:
  11.     int dato;
  12.     Nodo *sig;
  13.     Nodo *ant;
  14. public:
  15.     Nodo(void) { sig = ant = NULL; }
  16.  
  17.     Nodo( int x , Nodo* s = NULL , Nodo* a = NULL )
  18.     {
  19.         dato = x;
  20.         sig = s;
  21.         ant = a;
  22.     }
  23.  
  24.     // SETTERS
  25.     void setDato(int x) { dato = x; }
  26.     void setAnt(Nodo *a) { ant = a; }
  27.     void setSig(Nodo *s) { sig = s; }
  28.  
  29.     // GETTERS
  30.     int getDato()  { return dato;}
  31.     Nodo *getAnt() { return ant; }
  32.     Nodo *getSig() { return sig; }
  33.  
  34. };
  35.  
  36. class Lista
  37. {
  38. private:
  39.     Nodo *lista; // ancla
  40. public:
  41.     Lista(void) { Inicializar(); } // CONSTRUCTOR
  42.  
  43.     // METODOS BASICOS
  44.  
  45.     Nodo *Primero() { return lista; }
  46.     Nodo *Siguiente(Nodo *pos) { return pos->getSig(); }
  47.     Nodo *Anterior(Nodo *pos) { return pos->getAnt(); }
  48.  
  49.     Nodo *Ultimo() {
  50.         Nodo *aux = lista;
  51.  
  52.         if ( !Vacia() ) { while ( aux->getSig() ) { aux = aux->getSig(); } }
  53.         return aux;
  54.     }
  55.  
  56.     // METODOS DE LA LISTA
  57.     void Inicializar() { lista = NULL; }
  58.     bool Vacia() { return lista==NULL; }
  59.     void Mostrar();
  60.     void Insertar(int x, Nodo* pos = NULL);
  61. };
  62.  
  63.  
  64. void Lista::Insertar(int x, Nodo* pos)
  65. {
  66.     Nodo* aux;
  67.         Nodo* temp_n = new Nodo(x);
  68.  
  69.         if ( Vacia() ){
  70.                 lista = temp_n;
  71.  
  72.         }else{
  73.                 if ( pos == Primero() ){
  74.                         aux = Primero();
  75.                         aux->setAnt(temp_n);
  76.  
  77.                         temp_n->setSig(aux);
  78.                         lista = temp_n;
  79.  
  80.                 }else if ( pos == NULL ){
  81.  
  82.                         aux = Ultimo();
  83.                         aux->setSig(temp_n);
  84.                         temp_n->setAnt(aux);
  85.  
  86.                 }else{
  87.                         aux = Primero();
  88.  
  89.                         while ( aux ){
  90.                                 if ( aux == pos ){
  91.                                         Anterior(aux)->setSig( temp_n );
  92.  
  93.                                         temp_n->setAnt( Anterior(aux) );
  94.                                         temp_n->setSig( aux );
  95.  
  96.                                         aux->setAnt( temp_n );
  97.  
  98.                                 }else {
  99.                                     aux = aux->getSig();
  100.                 }
  101.                         }
  102.                 }
  103.         }
  104. }
  105.  
  106. void Lista::Mostrar()
  107. {
  108.     Nodo* aux;
  109.  
  110.     Primero();
  111.     aux = lista;
  112.         if ( !Vacia() ){
  113.                 while ( aux ){
  114.             cout << aux ->getDato();
  115.             cout << "\n";
  116.             aux = aux ->getSig();
  117.                 }
  118.         }
  119. }
  120.  
  121. #endif
  122.  
  123.  

main.cpp
Código: C++
  1. #include <iostream>
  2. #include "listas.h"
  3.  
  4. using namespace std;
  5.  
  6. int main(void)
  7. {
  8.     Lista numeros; // Mi lista
  9.     char opc; // Opcion del menu
  10.     int n; // dato a insertar
  11.  
  12.     do{
  13.         cout << "\n \n  LISTAS DOBLEMENTE LIGADAS: ";
  14.         cout << "\n *- MENU -* ";
  15.         cout << "\n 1. AGREGAR A LA LISTA . ";
  16.         cout << "\n 2. MOSTRAR LOS DATOS . ";
  17.         cout << "\n 3. SALIR . ";
  18.         cout << "\n         _> ";
  19.         cin >> opc;
  20.  
  21.         switch(opc){
  22.         case '1':
  23.             cout << "\n AGREGANDO DATOS A LA LISTA . ";
  24.             cout << "\n INGRESE EL VALOR NUMERICO . ";
  25.             cout << "\n         _> ";
  26.             cin >> n;
  27.             numeros.Insertar(n);
  28.             cout << " --> < Guardado correctamente > " << endl;
  29.             break;
  30.         case '2':
  31.             if(numeros.Vacia())
  32.             {
  33.                 cout << "\n < No hay registros!. > ";
  34.                 break;
  35.             }
  36.  
  37.             cout << "\n \n DATOS GUARDADOS EN LA LISTA: \n ";
  38.             numeros.Mostrar();
  39.             break;
  40.         case '3':
  41.             cout << " - < Saliendo!...... >" << endl;
  42.             break;
  43.         default:
  44.             cout << " - < Opcion incorrecta!, intente de nuevo. >" << endl;
  45.             break;
  46.  
  47.         }
  48.  
  49.     }while(opc!='3');
  50.  
  51.     cin.ignore();
  52.     return 0;
  53. }
  54.  
  55.  

Espero que les sea de utilidad, y son bienvenidas sus criticas y/o comentarios  8)
Zalu2!
« Última modificación: Octubre 17, 2014, 03:48:33 pm por 2Fac3R »
Escuela de Hackers & Programación.
You are not allowed to view links. Register or Login

Desconectado Khala

  • *
  • Underc0der
  • Mensajes: 22
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
  • Skype: gaby_malkav
« Respuesta #1 en: Octubre 17, 2014, 04:04:50 pm »
Copado aporte! Sigue asi!

 Saludos :)

 

¿Te gustó el post? COMPARTILO!



[Libro] Programacion en C, metodología, algoritmos y estructuras datos

Iniciado por Stiuvert

Respuestas: 3
Vistas: 4013
Último mensaje Diciembre 11, 2016, 12:41:12 pm
por sanosuken
Script de C / Biblioteca / {Estructura}

Iniciado por Kr3L

Respuestas: 0
Vistas: 1411
Último mensaje Junio 22, 2016, 03:29:09 am
por Kr3L
[ESTRUCTURA DE DATOS] Árbol binario [C++]

Iniciado por 2Fac3R

Respuestas: 0
Vistas: 1956
Último mensaje Octubre 17, 2014, 04:06:25 pm
por 2Fac3R
Estructura de Datos [Cola Circular][C]

Iniciado por Olger346

Respuestas: 1
Vistas: 5722
Último mensaje Abril 06, 2017, 10:28:13 am
por sitoftonic
[ESTRUCTURA DE DATOS] Listas doblemente ligadas [C++] (otro ejemplo)

Iniciado por 2Fac3R

Respuestas: 1
Vistas: 1774
Último mensaje Octubre 17, 2014, 04:01:51 pm
por ANTRAX