Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: samur88 en 22 Diciembre 2010, 01:49 am



Título: ¿Función bien implementada para borrar elementos en listas?
Publicado por: samur88 en 22 Diciembre 2010, 01:49 am
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.

Código:
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.


Título: Re: ¿Función bien implementada para borrar elementos en listas?
Publicado por: leogtz en 22 Diciembre 2010, 19:08 pm
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?


Título: Re: ¿Función bien implementada para borrar elementos en listas?
Publicado por: Ferno en 22 Diciembre 2010, 21:28 pm
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.


Título: Re: ¿Función bien implementada para borrar elementos en listas?
Publicado por: samur88 en 23 Diciembre 2010, 14:43 pm
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  :)


Título: Re: ¿Función bien implementada para borrar elementos en listas?
Publicado por: Ferno en 26 Diciembre 2010, 20:15 pm
Bueno, no lo leí para verificar. Pero podés entrar a este topic: http://foro.elhacker.net/programacion_cc/librospapers_cc-t296234.0.html
y 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


Título: Re: ¿Función bien implementada para borrar elementos en listas?
Publicado por: samur88 en 31 Diciembre 2010, 00:36 am
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 ^^