Autor
|
Tema: ¿Función bien implementada para borrar elementos en listas? (Leído 5,372 veces)
|
samur88
Desconectado
Mensajes: 125
|
Hola ^^ Saludos a todos. Estoy liado con las listas en C y he creado la siguiente función, me gustaría saber si esta bien implementada para no tener luego problema con los punteros. int del_list(lista **primero,int a){ lista *aux,*ant; if(a == 0){printf("El elemento no existe\n"); return 0;} /* if a es mayor que los elementos que contiene la lista, el elemento no existe */ if(a == 1){ ant = *primero; *primero = ant->next; free(ant); } else{ a = a - 2; ant = *primero; while(a >0 && aux != NULL){ ant = ant->next; a--; } aux = ant->next; ant->next = ant->next->next; free(aux); } }
Lo ultimo que me faltaría por hacer es que si introduzco un elemento mayor que el numero de elementos que contiene la lista me diga elemento invalido, pero por lo demás me gustaría saber si esta bien implementada. Un saludo.
|
|
|
En línea
|
|
|
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
No entiendo como utilizas "a".
¿Se supone que "a" es el elemento a borrar?
¿Si la lista está ordenada no deberías primero comparar si "a" es menor que *primero->dato, donde dato es el componente de la lista?
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Imagino que su lista no posee ningún tipo de clave o componente para identificar algún elemento, debido a que no libera información adicional más que el "nodo" al borrarlo.
La función de la variable "a" en este caso, es la de dar la posición del "nodo" a borrar a partir del primero.
Al código no le veo alguna falla importante como para tirarlo a la basura, pero puede mejorarse mucho. No voy a entrar en discusión sobre como implementar una Lista Simple porque trae aparejado temas como la estructura principal y TDAs que a mi entender mejoran el código, pero no es el momento.
Así que analizando directamente tu código, primero hazle un cambio a la tercer línea en vez de == es mejor un <= para corroborar que "a" tampoco sea negativo. En el ciclo while, imagino que habrás querido poner "ant" en vez de aux. No utilizaste nunca ese aux hasta el momento y no tiene sentido en la condición de corte.
|
|
|
En línea
|
|
|
|
samur88
Desconectado
Mensajes: 125
|
Muchisimas gracias por la respuesta, pudes decirme donde puedo encontrar información de como implementar correctamente listas con TDA y estructuras, es que no he encontrado mucho por internet, algunas funcionas que me he visto ni compilaban y otras no funcionaban correctamente. Un saludo y felices fiestas
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
Bueno, no lo leí para verificar. Pero podés entrar a este topic: http://foro.elhacker.net/programacion_cc/librospapers_cc-t296234.0.htmly bajarte algún libro sobre C y estructura de datos. Por ejemplo este: Name: Programación en C, Metodologia, Algoritmos y Estructura de Datos Author(s): Joyanes Aguilar Luis, Zahonero Martínez Ignacio Hardcover: 558 pages Publisher: McGraw-Hill, 1st edition
|
|
|
En línea
|
|
|
|
samur88
Desconectado
Mensajes: 125
|
Muchas gracias por la respuesta, siento mucho no haber contestado antes, pero con el rollo de las navidades me ha sido difícil conectarme. Un saludo y Feliz Navidad ^^
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Lista circular en C bien implementada?
Programación C/C++
|
samur88
|
0
|
4,302
|
2 Enero 2011, 02:31 am
por samur88
|
|
|
retardo en borrar y crear carpetas y otros elementos
Windows
|
hdarko
|
0
|
1,785
|
29 Abril 2014, 12:40 pm
por hdarko
|
|
|
Documentar función para borrar nodo según petición del usuario en C.
Programación C/C++
|
NOB2014
|
4
|
2,981
|
16 Julio 2016, 02:59 am
por NOB2014
|
|
|
Cómo activar la nueva función de seguridad implementada en Chrome 63
Noticias
|
wolfbcn
|
0
|
1,589
|
8 Diciembre 2017, 21:47 pm
por wolfbcn
|
|
|
contar elementos de dos listas en python
Scripting
|
flony
|
4
|
7,288
|
5 Noviembre 2021, 23:35 pm
por flony
|
|