Autor
|
Tema: Duda sobre listas enlazadas (C) (Leído 2,295 veces)
|
TheShocker
Desconectado
Mensajes: 14
|
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
Mensajes: 144
|
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. #include <stdio.h> #include <stdlib.h> struct node { int v; struct node * next; }; struct node * head=NULL; // Cabeza apunta a nulo porque todavía no hay ningún elemento void push (int n){ // Insertar elementos struct node *m; m =(struct node *) malloc (sizeof(struct node )); m->next=head; m->v=n; head=m; } int pop (){ // Sacar elementos int m; struct node * rem; rem=head; m=rem->v; head=rem->next; return m; } int main (void){ struct node * mostrar; // PARA MOSTRAR LA LISTA push (50); push (90); printf ("Elemento que he sacado: %d\n",pop ()); push (90); mostrar=head; while (mostrar != NULL){ mostrar=mostrar->next; } return 0; }
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
Mensajes: 14
|
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
Mensajes: 1.603
|
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
Mensajes: 14
|
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
Mensajes: 1.603
|
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
Mensajes: 144
|
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. int tienedos (){ if (head == NULL || head->next == NULL) return 0; else return 1; }
¿O me equivoco? Saludos.
|
|
« Última modificación: 31 Diciembre 2015, 00:33 am por nisteeklod »
|
En línea
|
LET'S DO STUFF!!
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
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
Mensajes: 144
|
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
Mensajes: 1.603
|
Tienes razón. Pon el código para ver cómo seria.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Listas enlazadas en c++
Programación C/C++
|
N3r0
|
3
|
8,588
|
13 Julio 2010, 12:42 pm
por N3r0
|
|
|
[C] Listas enlazadas.
Programación C/C++
|
The Swash
|
5
|
31,660
|
26 Octubre 2011, 04:56 am
por brians444
|
|
|
listas enlazadas
Programación C/C++
|
javier210186
|
3
|
2,903
|
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,595
|
19 Noviembre 2013, 02:15 am
por xaps
|
|
|
Duda listas enlazadas.
Java
|
david806
|
1
|
1,347
|
1 Octubre 2016, 03:58 am
por Azkto
|
|