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 ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Función bien implementada para borrar elementos en listas?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Función bien implementada para borrar elementos en listas?  (Leído 3,972 veces)
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
¿Función bien implementada para borrar elementos en listas?
« en: 22 Diciembre 2010, 01:49 »

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.


En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: ¿Función bien implementada para borrar elementos en listas?
« Respuesta #1 en: 22 Diciembre 2010, 19:08 »

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

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: ¿Función bien implementada para borrar elementos en listas?
« Respuesta #2 en: 22 Diciembre 2010, 21:28 »

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 Desconectado

Mensajes: 125


Ver Perfil
Re: ¿Función bien implementada para borrar elementos en listas?
« Respuesta #3 en: 23 Diciembre 2010, 14:43 »

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 Desconectado

Mensajes: 375


Ver Perfil
Re: ¿Función bien implementada para borrar elementos en listas?
« Respuesta #4 en: 26 Diciembre 2010, 20:15 »

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
En línea

samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: ¿Función bien implementada para borrar elementos en listas?
« Respuesta #5 en: 31 Diciembre 2010, 00:36 »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines