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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda lista con estructuras c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda lista con estructuras c++  (Leído 2,014 veces)
d00ze13

Desconectado Desconectado

Mensajes: 78


Ver Perfil
Duda lista con estructuras c++
« en: 18 Diciembre 2013, 19:26 pm »

Estoy estudiando por mi cuenta como hacer listas en c++ con estructuras, y queria pedir a ver si alguien le puede echar un ojo a ver si esta bien hecho, sobretodo si libero bien la memoria de cada nodo creado en la lista.

Pd: Gracias de antemano!

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct nodo {
  5.    int dato;
  6.    nodo *sig;
  7. };
  8.  
  9. void insertar(nodo* &cab, int dato) {
  10.    if (cab == 0) {
  11.        cab = new nodo;
  12.        cab->dato = dato;
  13.        cab->sig = 0;
  14.    }
  15.    else {
  16.        nodo *lista = cab;
  17.        nodo *nuevoNodo = new nodo;
  18.  
  19.        nuevoNodo->dato = dato;
  20.        nuevoNodo->sig = 0;
  21.  
  22.        while (lista->sig != 0) {
  23.            lista = lista->sig;
  24.        }
  25.        lista->sig = nuevoNodo;
  26.    }
  27. }
  28.  
  29. void mostrarNodos(nodo *cab) {
  30.    nodo *lista = cab;
  31.    while(lista != 0) {
  32.        cout << lista->dato << endl;
  33.        lista = lista->sig;
  34.    }
  35. }
  36.  
  37. void borrarNodos(nodo *cab) {
  38.    nodo *lista = cab, *aux;
  39.  
  40.    while (lista->sig != 0) {
  41.        aux = lista->sig;
  42.        lista = aux;
  43.        delete aux;
  44.    }
  45. }
  46.  
  47. int main() {
  48.    nodo *cab = 0;
  49.  
  50.    insertar(cab, 3);
  51.    insertar(cab, 4);
  52.    insertar(cab, 7);
  53.    insertar(cab, 12);
  54.  
  55.    mostrarNodos(cab);
  56.    borrarNodos(cab);
  57.    return 0;
  58. }
  59.  
  60.  


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda lista con estructuras c++
« Respuesta #1 en: 19 Diciembre 2013, 03:18 am »

* En la función "mostrarNodos" no necesitas de una variable local, en su lugar puedes utilizar el parámetro de la función:
Código
  1. void mostrarNodos(nodo* p)
  2. {
  3.   while (p){
  4.      cout << p->dato << endl;
  5.      p = p->sig;
  6.   }
  7. }

* La función "borrarNodos" esta mal implementada (debe reventar el programa) y solo necesitas de una variable local:
Código
  1. void borrarNodos(nodo* p)
  2. {
  3.   nodo* sig;
  4.  
  5.   while (p){
  6.      sig = p->sig;
  7.      delete p;
  8.      p = sig;
  9.   }
  10. }

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
d00ze13

Desconectado Desconectado

Mensajes: 78


Ver Perfil
Re: Duda lista con estructuras c++
« Respuesta #2 en: 19 Diciembre 2013, 15:00 pm »

Código
  1. void mostrarNodos(nodo* p)
  2. {
  3.    while (p) {
  4.         cout << p->dato << endl;
  5.         p = p->sig;
  6.    }
  7. }
  8.  

No entiendo una cosa de esta función, en la última vuelta del bucle cuando el nodo p->sig ya apunte a NULL y p al último nodo, si quieres volver a llamar a la función mostrarNodos, no mostraría solo el último dato? (ya que p apunta al último nodo, y debería de apuntar al primer nodo para recorrerlos de principio a fin, no?).

Muchas gracias por tu respuesta!
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda lista con estructuras c++
« Respuesta #3 en: 19 Diciembre 2013, 15:34 pm »

No entiendo una cosa de esta función, en la última vuelta del bucle cuando el nodo p->sig ya apunte a NULL y p al último nodo, si quieres volver a llamar a la función mostrarNodos, no mostraría solo el último dato? (ya que p apunta al último nodo, y debería de apuntar al primer nodo para recorrerlos de principio a fin, no?).
No porque el parámetro "p" es una variable local.

Cuando se llama a la función:
Código
  1. mostrarNodos(cab);
Esta recibe como argumento el valor almacenado en la variable "cab" (la dirección en memoria del primer elemento de la lista), este se utiliza como valor inicial del parámetro "p" de la mentada función y como es una variable local puedes modificar su valor sin afectar otras partes del programa (si aplicas indirección con "*" o "[]" ya no trabajas con el puntero sino con el objeto apuntado).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C] - Duda estructuras « 1 2 »
Programación C/C++
h0oke 14 6,583 Último mensaje 21 Mayo 2010, 22:34 pm
por Littlehorse
Duda con estructuras (struct)
Programación C/C++
alexis33de 1 2,543 Último mensaje 28 Agosto 2010, 03:41 am
por Littlehorse
[Duda] Estructuras « 1 2 »
ASM
xv0 15 8,700 Último mensaje 12 Febrero 2013, 10:18 am
por fary
Duda con estructuras
Dudas Generales
fins94 1 1,928 Último mensaje 4 Junio 2013, 18:55 pm
por ivancea96
Duda con estructuras en C (Urgente) « 1 2 »
Programación C/C++
jamatbar 18 5,594 Último mensaje 7 Enero 2014, 17:51 pm
por do-while
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines