miércoles, 18 de julio de 2012

Hola que tal amigos.

Hace unos días me mandaron a investigar el tema de lista en C++, estoy estudiando estructura de datos pues en internet encontre informacion muy desorganizada prácticamente no entendi nada como de las 3000 palabras que lei.

Bueno en este post les dare las bases firmes para que podais hacer el programa mas bacico de programar listas en C++

Nota = Este programa esta echo bajo el compilador de DEV-CPP

Nota: El codigo esta desarrollado en C++ y hace parte de la programacion estructurada. Esto quiere decir que no trabajamos con clases (como en programacion orientada a objetos) si no con estructuras que es el ambiente de la programacion estructurada.

Asi que sigamos:

1)Lo primero hacer es mirar como se construye gráficamente  una lista en c++:

Para ello podéis ver el siguiente vídeo por que yo solo te daré el código pertinente a la creación de una lista simplemente encadenada en C++.


Este vídeo te explica como crear el primer nodo y luego si ir creando los nodos siguientes pero a modo de explicación graficamente.

2)Ya aprendido la parte logica o el funcionamiento grafico de lo que es una lista entonces procedere a ir revelando paso por paso cada linea de codigo que debeis poner en tu compilador para crear una lista en c++.


  1. Lo primero que  debemos hacer es declarar las dos librerias necesarias para el proposito=



#include<iostream>
#include<stdlib.h>


  • Listo luego declaramos la estructura o el estruct donde vamos a guardar los nodo=


struct nodo{
    int info;                               // En la variable info guardaremos el contenido de los nodos.
    struct nodo *sgt;                 // El puntero siguiente sera para crear los nodos de la lista.
};

Si hasta aquí no as entendido tranquilo sigue leyendo.


  • Bueno seguimos como el main()



  • En le main declaramos los dos punteros que nos van a servir en la creacion de los nodos:



    struct nodo *cabe;                 // este para la cabeza del nodo
    struct nodo *nuevo;               //este para los nuevos nodos que se creen.


  • Procedemos a declarar la cabeza  como NULL


    cabe=NULL;

            Este valor de Null lo abras visto en el video por lo tanto ya sabras para que sirve.
            Importante si no declaras la cabeza del nodo como NULL posiblemente obtendras un error en                                        tiempo de ejecucion  



  • Ahora  vamos a  declarar tres variables tipo entero que nos ayudaran en la creación de nodos.



    int dato;                     // Esta variable para almacenar los datos que se le vallan a introducir a los nodos.
    int  i=1;              //Esta es la variable del contador para crear los nodos.
    int cant;             //Esta para la cantidad de nodos que el usuario desee.


  • Ahora imprimimos un mensaje para pedir la cantidad de nodos que desea el usuario=


    cout<<"Entrar cantidad de nodos=";
    cin>>cant;  

Como viste ya aviamos declarado la variable "cant" que es la que nos permite saber cuantos nodos desea el usuario.



  • Ahora vamos a realizar el proceso mas engorroso y que requiere la mayo atención posible, por favor pon atención en cada paso de esto porque son lo mas vitales.


  1. Abrimos un ciclo while que yegara hasta donde lo especifico el usuario con la sentencia anterior escrita.
         Este ciclo while dependera de dos variables las variables i y cant anteriormente declaradas
         La variable cant es el final del ciclo por ejemplo si la variable cant contiene el valor de 5 entonces este  sera el numero de repeticiones del ciclo o mejor dicho sera la cantidad de vueltas que dara el ciclo.

        Con esta variable controlamos los nodos que vamos a crear.


    while(i<=cant){  //Aqui se inicia el ciclo while.
                       nuevo=(struct nodo *)malloc(sizeof(struct nodo));  //Crea un nodo nuevo
                       nuevo->sgt=cabe;
                       cout<<"Entre dato=";
                       cin>>dato;
                       nuevo->info=dato;
                       cabe=nuevo;
                       i++;
    }

Especificare las lineas que he creado en el  ciclo=

  • nuevo=(struct nodo *)malloc(sizeof(struct nodo)); = esta linease usa  para crear el nuevo nodo que vamos a usar en la primera vuelta del ciclo.
  • La parte de  (struct nodo *)malloc(sizeof(struct nodo)) se usa para asignar memoria dinamicamente cuando se este ejecutando el programa.

  • nuevo->sgt=cabe;  = Esta linea es para que el nuevo nodo se le el valor de cabeza. Y asi ir creando los demas nodos de forma ordenada. Importante ver video para mirar graficamente este proceso donde el enlace del nodo original pasa al enlace del nodo nuevo.
  • Entonces el nodo original pasa a ser el nodo de atras como en el video. Y el nuevo nodo pasa a ser el primero, y asi sucesivamente en la repeticion del ciclo.




  • cout<<"Entre dato=";
  • cin>>dato;
  • Aqui solicitamos los datos que vamos a entrar en el nuevo nodo.

  • nuevo->info=dato;   Entonces ahora hacemos que la informacion pedida anteriormente pase a la variable "info" que sera el contenido del nodo nuevo.

  • cabe=nuevo;  aqui damos al apuntador cabeza la direccion de nuevo quedando asi  el apuntador cabeza que apuntaba a el nodo original, apuntando al nodo nuevo.




  • Ahora procedemos a imprimir los nodos con la siguientes linea.

    while(nuevo!=NULL){  //El apuntador nodo ira siguiendo los nodos ya para hasta encontrar NULL
        cout<<"\nDATO="<<nuevo->puntos;  //Imprimimos los datos de cada nodo
        nuevo=nuevo->sgt;   //Importante y no olivadar con esta sentencia corremos el apuntador al siguiente          
    }                                   //nodo
    system("pause>>null");
}


Listo hasta aquí el programa mas fácil y entendible de listas en C++.

Ahora te dejo el código completo y sin alteraciones para que lo ejecutes y pruebes.
=


#include<iostream>
#include<stdlib.h>
using namespace std;
//*******************************
struct nodo{
    int info;
    struct nodo *sgt;
};
//************************************
main(){
    struct nodo *cabe;
    struct nodo *nuevo;
    struct nodo *aux;
    cabe=NULL;
    int dato;
    int cant, i=1, cont;
    cout<<"Entrar cantidad de nodos=";cin>>cant;
    while(i<=cant){
                       nuevo=(struct nodo *)malloc(sizeof(struct nodo));
                       nuevo->sgt=cabe;
                       cout<<"Entre dato=";
                       cin>>dato;
                       nuevo->info=dato;
                       cabe=nuevo;
                       i++;
    }

    while(nuevo!=NULL){
        cout<<"\nDATO="<<nuevo->info;
        nuevo=nuevo->sgt;
    }
   
    system("pause>>null");
}


Espero te sirva hasta la proxima.