elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Listas enlazadas C++, struct a clases
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Listas enlazadas C++, struct a clases  (Leído 4,563 veces)
DEaniz

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Listas enlazadas C++, struct a clases
« en: 5 Mayo 2015, 22:37 pm »

Hola, buenas tardes, quisiera saber si alguien me podría ayudar,
hice un programa de listas enlazadas, pero use struct, ya que se me hacia mas facil crear un programa así, pero mi maestra me dijo que no tenia que ser con struct, sino con CLASES, y no se como hacer mi mismo programa pero con clases,
alguien que me pueda orientar o ayudar porfavor?
MUCHAS GRACIAS

_________________________________________________
Este es mi programa


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include<conio.h>
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. typedef struct dato nodo;
  9.  
  10. nodo* crear_lista(nodo* lista);
  11. nodo* ingresar_dato(char* nombre, int boleta, nodo* lista);
  12.  
  13. void mostrar_lista(nodo* lista);
  14. void mostrar_nodo(nodo* elemento);
  15. void menu(void);
  16.  
  17. void borrar_lista(nodo* lista);
  18. nodo* borrar_nodoxnombre(char *nombre, nodo* lista);
  19. nodo* borrar_nodoxnota(int boleta, nodo* lista);
  20.  
  21. nodo* buscar_nodo(nodo* lista, char *caracter);
  22. void ordenar_lista(nodo* lista);
  23.  
  24.  
  25.  
  26. struct dato
  27.    {
  28.    char nombre[80];
  29.    int nota;
  30.    struct dato *sig;
  31.    };
  32.  
  33. nodo* crear_lista(nodo* lista)
  34.    {
  35.    return (lista = NULL);
  36.    }
  37.  
  38. nodo* ingresar_dato(char* nombre, int boleta, nodo* lista)
  39.    {
  40.    nodo *nuevo_dato;
  41.    nodo *auxiliar = NULL;
  42.  
  43.    nuevo_dato = (nodo*)malloc(sizeof(nodo));
  44.  
  45.    if(nuevo_dato != NULL)
  46.        {
  47.        strcpy((nuevo_dato->nombre), nombre);
  48.        nuevo_dato->nota = boleta;
  49.        nuevo_dato->sig = NULL;
  50.  
  51.        if(lista == NULL)
  52.            lista = nuevo_dato;
  53.        else
  54.            {
  55.            auxiliar = lista;
  56.            while(auxiliar->sig != NULL)
  57.                auxiliar = auxiliar->sig;
  58.            auxiliar->sig = nuevo_dato;
  59.            }
  60.        }
  61.    else
  62.         cout<<"\n\nNo se pudo reservar memoria\n\n";
  63.    return lista;
  64.    }
  65.  
  66. void mostrar_lista(nodo* lista)
  67.    {
  68.    nodo *auxiliar;
  69.    int contador = 0;
  70.  
  71.    if(lista == NULL)
  72.        cout<<"\n\nLa lista esta vacia\n\n";
  73.  
  74.    auxiliar = lista;
  75.    while(auxiliar != NULL)
  76.        {
  77.         cout<<"\n\nPersona"<<(contador+1);
  78.         cout<<"\nNombre y Apellido: "<<auxiliar->nombre;
  79.         cout<<"\n\nBoleta:      "<< auxiliar->nota;
  80.        contador++;
  81.  
  82.        auxiliar = auxiliar->sig;
  83.        }
  84.   cout<<"\nFin de lista\n\n";
  85.    }
  86.  
  87. void borrar_lista(nodo* lista)
  88.    {
  89.    nodo *borra;
  90.  
  91.    borra = lista;
  92.    while(borra)
  93.        {
  94.        lista = lista->sig;
  95.        free(borra);
  96.        borra = lista;
  97.        }
  98.    }
  99.  
  100. void menu(void)
  101.    {
  102.  
  103.     cout<<"\n\nLista_Practica_3             3CM7:\n\n";
  104.     cout<<"1) Ingresar dato\n";
  105.    cout<<"2) Mostrar lista\n";
  106.   cout<<"3) Borrar lista\n";
  107.    cout<<"4) Borrar por nombre\n";
  108.     cout<<"5) Borrar por boleta\n";
  109.     cout<<"6) Buscar en lista\n";
  110.     cout<<"7) Ordenar lista\n";
  111.    cout<<"0)SALIR\n\n";
  112.  
  113.  
  114.    }
  115.  
  116. nodo* borrar_nodoxnombre(char *nombre, nodo* lista)
  117.     {
  118.    if(lista != NULL)
  119.        {
  120.        nodo *ptraux;
  121.        nodo *ptranterior = NULL;
  122.        int cont;
  123.  
  124.        ptraux = lista;
  125.        while(ptraux != NULL && (strcmp(ptraux->nombre, nombre) != 0))
  126.            {
  127.            ptranterior = ptraux;
  128.            ptraux = ptraux->sig;
  129.            cont++;
  130.            }
  131.        if(cont == 1 && ptraux->sig == NULL)
  132.            {
  133.            free(ptraux);
  134.            lista = NULL;
  135.            }
  136.        if(ptraux == NULL)
  137.            cout<<"\n\nNo se encontro una persona con ese nombre\n\n";
  138.        else if(ptranterior == NULL)
  139.            {
  140.            lista = lista->sig;
  141.            free(ptraux);
  142.            }
  143.        else
  144.            {
  145.            ptranterior->sig = ptraux->sig;
  146.            free(ptraux);
  147.            }
  148.        }
  149.  
  150.    return lista;
  151.    }
  152.  
  153. nodo* borrar_nodoxnota(int boleta, nodo* lista)
  154.        {
  155.    if(lista != NULL)
  156.        {
  157.        nodo *ptraux;
  158.        nodo *ptranterior = NULL;
  159.        int cont = 0;
  160.  
  161.        ptraux = lista;
  162.        while(ptraux != NULL && ptraux->nota != boleta)
  163.            {
  164.            ptranterior = ptraux;
  165.            ptraux = ptraux->sig;
  166.            cont++;
  167.            }
  168.        if(cont == 1 && ptraux->sig == NULL)
  169.            {
  170.            free(ptraux);
  171.            lista = NULL;
  172.            }
  173.        if(ptraux == NULL)
  174.            cout<<"\n\nNo se encontro una persona con ese numero de boleta\n\n";
  175.        else if(ptranterior == NULL)
  176.            {
  177.            lista = lista->sig;
  178.            free(ptraux);
  179.            }
  180.        else
  181.            {
  182.            ptranterior->sig = ptraux->sig;
  183.            free(ptraux);
  184.            }
  185.        }
  186.  
  187.    return lista;
  188.    }
  189.  
  190. nodo* buscar_nodo(nodo* lista, char *caracter)
  191.    {
  192.    nodo *aux;
  193.    char noabuscar[20];
  194.    char a[] = "a";
  195.    char b[] = "b";
  196.    int nabuscar;
  197.    if(lista != NULL)
  198.        {
  199.        if(strcmp(caracter,a) == 0)
  200.            {
  201.            cout<<"\n\nIngrese el nombre a buscar: ";
  202.            fflush(stdin);
  203.            fgets(noabuscar, 20, stdin);
  204.            aux = lista;
  205.            while(aux != NULL)
  206.                {
  207.                if(strcmp(aux->nombre, noabuscar) == 0)
  208.                    return aux;
  209.                aux = aux->sig;
  210.                }
  211.            return aux;
  212.            }
  213.        else if(strcmp(caracter,b) == 0)
  214.            {
  215.            cout<<"\n\nIngrese la nota a buscar: ";
  216.            fflush(stdin);
  217.            cout<<nabuscar;
  218.            aux = lista;
  219.            while(aux != NULL)
  220.                {
  221.                if(aux->nota == nabuscar)
  222.                    return aux;
  223.                aux = aux->sig;
  224.                }
  225.            return aux;
  226.            }
  227.         else
  228.            {
  229.            cout<<"\n\nOpcion no valida\n\n";
  230.            return 0;
  231.            }
  232.        }
  233.    }
  234.  
  235. void mostrar_nodo(nodo* elemento)
  236.    {
  237.    nodo* nodoencontrado;
  238.    nodoencontrado = elemento;
  239.    if(nodoencontrado == NULL)
  240.       cout<<"\n\nNo se obtuvieron resultados\n\n";
  241.  
  242.  
  243.    else
  244.        {
  245.        cout<<"\n\nNodo encontrado:\n\n";
  246.        cout<<"\nNompre y apellido:"<< nodoencontrado->nombre;
  247.        cout<<"\nBoleta:  "<< nodoencontrado->nota;
  248.  
  249.        }
  250.    }
  251. /*    \n\n\n\n   */
  252.  
  253. void ordenar_lista(nodo* lista)
  254.    {
  255.    nodo *anterior;
  256.    nodo *siguiente;
  257.    nodo temp;
  258.  
  259.    anterior = lista;
  260.  
  261.    while(anterior->sig != NULL)
  262.        {
  263.        siguiente = anterior->sig;
  264.  
  265.        while(siguiente != NULL)
  266.            {
  267.            if(strcmp(anterior->nombre, siguiente->nombre) > 0)
  268.                {
  269.                strcpy(temp.nombre, siguiente->nombre);
  270.                temp.nota = siguiente->nota;
  271.                strcpy(siguiente->nombre, anterior->nombre);
  272.                siguiente->nota = anterior->nota;
  273.                strcpy(anterior->nombre, temp.nombre);
  274.                anterior->nota = temp.nota;
  275.                }
  276.            siguiente = siguiente->sig;
  277.            }
  278.        anterior = anterior->sig;
  279.        siguiente = anterior->sig;
  280.        }
  281. cout<<"\n\nLista ordenada\n\n";
  282.  
  283.  
  284.    }
  285.  
  286.    int main(int argc, char** argv)
  287.    {
  288.    nodo *inicio;
  289.    nodo *nodobuscado;
  290.    char nom[20];
  291.    char nomaborrar[20];
  292.    int nborrar;
  293.    int nota, i, cant, op;
  294.    char s[2];
  295.  
  296.    inicio = crear_lista(inicio);
  297.  
  298.    menu();
  299.    cin>>op;
  300.    while(op != 0)
  301.        {
  302.        switch(op)
  303.            {
  304.            case 1: cout<<"\n\nQue cantidad de datos ingresara: ";
  305.                    cin>>cant;
  306.                    cout<<"\n\n";
  307.  
  308.                    cout<<"Ingreso de datos:\n\n";
  309.                    for(i=0 ; i < cant ; i++)
  310.                        {
  311.                        cout<<"Nombre y apellido: ";
  312.                        fflush(stdin);
  313.                        fgets(nom, 80, stdin);
  314.                       cout<<"\nBoleta:      ";
  315.                        fflush(stdin);
  316.                        cin>>nota;
  317.                        cout<<"\n\n";
  318.                        inicio = ingresar_dato(nom, nota, inicio);
  319.                        }
  320.                    break;
  321.  
  322.            case 2: mostrar_lista(inicio);
  323.                    break;
  324.  
  325.            case 3: borrar_lista(inicio);
  326.                    free(inicio);
  327.                    cout<<"\n\nLista Borrada\n\n";
  328.                    inicio = NULL;
  329.                    break;
  330.  
  331.            case 4: cout<<"\n\nIngrese el nombre a borrar\n\n";
  332.                    fflush(stdin);
  333.                    fgets(nomaborrar, 80, stdin);
  334.                    inicio = borrar_nodoxnombre(nomaborrar, inicio);
  335.                    break;
  336.  
  337.            case 5: cout<<"\n\nIngrese la nota a borrar\n\n";
  338.                    fflush(stdin);
  339.                    cin>>nborrar;
  340.                    inicio = borrar_nodoxnota(nborrar, inicio);
  341.                    break;
  342.  
  343.            case 6: cout<<"\n\n('a') para buscar por nombre || ('b') para buscar por nota\n\n";
  344.                    fflush(stdin);
  345.                    fgets(s, 2, stdin);
  346.                    nodobuscado = buscar_nodo(inicio, s);
  347.                    mostrar_nodo(nodobuscado);
  348.                    break;
  349.  
  350.            case 7: ordenar_lista(inicio);
  351.                    break;
  352.  
  353.  
  354.  
  355.            default: cout<<"\n\n Este no es una opcion, intentelo nuevamente// \n\n";
  356.            }
  357.             getch();
  358.            system("cls");
  359.        menu();
  360.        cin>>op;
  361.        }
  362.  
  363.  
  364.    return (EXIT_SUCCESS);
  365.    }


En línea

Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Re: Listas enlazadas C++, struct a clases
« Respuesta #1 en: 6 Mayo 2015, 14:10 pm »

Muy buenas, si no me equivoco a efectos prácticos una estructura hace prácticamente cualquier cosa que haga una clase, hay muy muy poquitas diferencias, por ejemplo, en struct por defecto lo que definas es "public", en las clases por defecto es"private".
A lo que voy, para pasarlo a clase apenas si tendrás que cambiar código.
Únicamente define las variables principales como "private"; y las funciones defínelas como métodos de la clase, en la sección "public".
Con eso ya haría lo mismo que ahora, aunque como buena práctica te recomendaría que añadieses los "getters" y "setters" oportunos.

Ejemplo:
Código
  1.  
  2. class dato
  3. {
  4.    private:
  5.           char nombre[80];
  6.           int nota;
  7.           dato *sig;
  8.    public:
  9.          nodo* crear_lista(nodo* lista)
  10.          {
  11.                  return (lista = NULL);
  12.           }
  13.     //..... y todos los métodos
  14. };
  15.  
  16.  

Espero haberte ayudado, corregidme si he errado en algo por favor.
 


« Última modificación: 6 Mayo 2015, 14:13 pm por Error 404: » En línea

Si se puede imaginar, se puede programar.
Error 404:

Desconectado Desconectado

Mensajes: 58



Ver Perfil
Re: Listas enlazadas C++, struct a clases
« Respuesta #2 en: 6 Mayo 2015, 14:19 pm »

Muy buenas, si no me equivoco a efectos prácticos una estructura hace prácticamente cualquier cosa que haga una clase, hay muy muy poquitas diferencias, por ejemplo, en struct por defecto lo que definas es "public", en las clases por defecto es"private".
A lo que voy, para pasarlo a clase apenas si tendrás que cambiar código.
Únicamente define las variables principales como "private"; y las funciones defínelas como métodos de la clase, en la sección "public".
Con eso ya haría lo mismo que ahora, aunque como buena práctica te recomendaría que añadieses los "getters" y "setters" oportunos.

Ejemplo:
Código
  1.  
  2. class dato
  3. {
  4.    private:
  5.           char nombre[80];
  6.           int nota;
  7.           dato *sig;
  8.    public:
  9.          nodo* crear_lista(nodo* lista)
  10.          {
  11.                  return (lista = NULL);
  12.           }
  13.     //..... y todos los métodos
  14. };
  15.  
  16.  

Eso en caso de que solo se te permita usar clases, si tu profesora te dejara usar un "struct" y clases además a mi personalmente me gusta este método:

Código
  1.  
  2. struct dato
  3. {
  4.           char nombre[80];
  5.           int nota;
  6.           dato *sig;
  7. }
  8.  
  9. class NombreClase
  10. {
  11.    private:
  12.           dato *ptr;
  13.    public:
  14.          nodo* crear_lista(nodo* lista)
  15.          {
  16.                  return (lista = NULL);
  17.           }
  18.     //..... y todos los métodos
  19. };
  20.  
  21.  

Espero haberte ayudado, corregidme si he errado en algo por favor.
 
En línea

Si se puede imaginar, se puede programar.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Listas enlazadas en c++
Programación C/C++
N3r0 3 8,557 Último mensaje 13 Julio 2010, 12:42 pm
por N3r0
[C] Listas enlazadas.
Programación C/C++
The Swash 5 31,617 Último mensaje 26 Octubre 2011, 04:56 am
por brians444
listas enlazadas
Programación C/C++
javier210186 3 2,877 Último mensaje 25 Octubre 2011, 02:33 am
por javier210186
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines