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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


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

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Duda sobre listas enlazadas (C)
« en: 30 Diciembre 2015, 18:39 pm »

Mi intención es crear una pila con listas enlazadas simples

El caso es que a la hora de insertar y eliminar en la última posición hay que recorrer siempre la lista enlazada. Mi pregunta es ¿Hay algún método que permita insertar/eliminar directamente desde el final?

Saludos


En línea

GGZ

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: Duda sobre listas enlazadas (C)
« Respuesta #1 en: 30 Diciembre 2015, 19:24 pm »

Mira este código es mio, lo que hago es insertar adelante me parece que si lo razonas un poco podés contestarte solo la pregunta.
Si se puede insertar desde el final, pensá lo que tendrías que hacer con la cabeza de la lista y demás.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct node {
  5. int v;
  6. struct node * next;
  7. };
  8.  
  9. struct node * head=NULL;  // Cabeza apunta a nulo porque todav&#237;a no hay ning&#250;n elemento
  10.  
  11. void push (int n){ // Insertar elementos
  12.  
  13. struct node *m;
  14. m=(struct node *) malloc (sizeof(struct node));
  15.  
  16. m->next=head;
  17. m->v=n;
  18. head=m;
  19.  
  20. }
  21.  
  22. int pop (){ // Sacar elementos
  23. int m;
  24.  
  25. struct node * rem;
  26.  
  27. rem=head;
  28. m=rem->v;
  29. head=rem->next;
  30.  
  31. return m;
  32. }
  33.  
  34. int main (void){
  35.  
  36. struct node * mostrar; // PARA MOSTRAR LA LISTA
  37.  
  38. push (50);
  39. push (90);
  40.  
  41. printf ("Elemento que he sacado: %d\n",pop());
  42.  
  43. push (90);
  44.  
  45. mostrar=head;
  46.  
  47. while (mostrar != NULL){
  48. printf ("%d\n",mostrar->v);
  49. mostrar=mostrar->next;
  50. }
  51.  
  52.  
  53.  
  54. return 0;
  55. }
  56.  

He editado el código por uno más simple.


« Última modificación: 30 Diciembre 2015, 19:30 pm por nisteeklod » En línea

LET'S DO STUFF!!
TheShocker

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Duda sobre listas enlazadas (C)
« Respuesta #2 en: 30 Diciembre 2015, 20:18 pm »

Mira este código es mio, lo que hago es insertar adelante me parece que si lo razonas un poco podés contestarte solo la pregunta.
Si se puede insertar desde el final, pensá lo que tendrías que hacer con la cabeza de la lista y demás.

Muchas gracias, me ha servido de gran ayuda.
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Duda sobre listas enlazadas (C)
« Respuesta #3 en: 30 Diciembre 2015, 20:57 pm »

Muy buenas.

nisteeklod, te has olvidado de liberar la memoria del nodo con free(). Cada vez que haces pop() el area de memoria apuntada por rem queda huerfana.
En línea

TheShocker

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Duda sobre listas enlazadas (C)
« Respuesta #4 en: 30 Diciembre 2015, 21:44 pm »

Muy buenas.

nisteeklod, te has olvidado de liberar la memoria del nodo con free(). Cada vez que haces pop() el area de memoria apuntada por rem queda huerfana.

Cierto. Haciendo un free funciona perfectamente hasta que ya no hay elementos que sacar, que entonces se produce un error.
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Duda sobre listas enlazadas (C)
« Respuesta #5 en: 30 Diciembre 2015, 22:25 pm »

Cierto, con lo que tendrás que controlar si hay algo para liberar antes de hacerlo. Mírate también el tema de que pasa si el usuario de tu pila hace un pop() nada mas empezar, sin haber siquiera introducido un dato en ella.
En línea

GGZ

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: Duda sobre listas enlazadas (C)
« Respuesta #6 en: 31 Diciembre 2015, 00:28 am »

Sí, me olvide usar la función free().

Cierto, con lo que tendrás que controlar si hay algo para liberar antes de hacerlo. Mírate también el tema de que pasa si el usuario de tu pila hace un pop() nada mas empezar, sin haber siquiera introducido un dato en ella.

Para solucionar eso deberías hacer es verificar si la cabeza es nula o no y, si necesitas sabes si hay más elementos verificar si head->next es nula.

Código
  1. int tienedos (){
  2.  
  3.      if (head == NULL || head->next == NULL) return 0;
  4.      else return 1;
  5. }

¿O me equivoco?

Saludos.
« Última modificación: 31 Diciembre 2015, 00:33 am por nisteeklod » En línea

LET'S DO STUFF!!
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Duda sobre listas enlazadas (C)
« Respuesta #7 en: 31 Diciembre 2015, 02:16 am »

Sí, es una solución pero aun sigues teniendo el problema: la función pop() devuelve un entero, falle o no. ¿Cómo sabe el usuario que la función pop() ha fallado y el dato que devuelve es basura?
En línea

GGZ

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: Duda sobre listas enlazadas (C)
« Respuesta #8 en: 31 Diciembre 2015, 03:29 am »

Eeeh!? creo que no entendiste lo que hice, no permite llamar a pop() si no se cumple tienedos() o tieneuno()

En línea

LET'S DO STUFF!!
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Duda sobre listas enlazadas (C)
« Respuesta #9 en: 31 Diciembre 2015, 04:13 am »

Tienes razón. Pon el código para ver cómo seria.
En línea

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,567 Último mensaje 13 Julio 2010, 12:42 pm
por N3r0
[C] Listas enlazadas.
Programación C/C++
The Swash 5 31,625 Último mensaje 26 Octubre 2011, 04:56 am
por brians444
listas enlazadas
Programación C/C++
javier210186 3 2,882 Último mensaje 25 Octubre 2011, 02:33 am
por javier210186
C++ - Duda sobre el consumo de memoria de listas enlazadas y structs.
Programación C/C++
xaps 0 1,586 Último mensaje 19 Noviembre 2013, 02:15 am
por xaps
Duda listas enlazadas.
Java
david806 1 1,333 Último mensaje 1 Octubre 2016, 03:58 am
por Azkto
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines