elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:41  


Tema destacado: Únete al Grupo Steam elhacker.NET

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  [?] Busqueda binaria en listas ligadas.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [?] Busqueda binaria en listas ligadas.  (Leído 1,612 veces)
_teiki

Desconectado Desconectado

Mensajes: 89



Ver Perfil WWW
[?] Busqueda binaria en listas ligadas.
« en: 8 Julio 2009, 01:50 »

 Estoy tratando de implementar la busqueda binaria en listas ligadas, pero tengo un problema al intentar acceder por ejemplo al elemento 5 de la lista.

 He intenta lo siguiente:
 
  lista+=5; pero no funciona
  lista+=(sizeof(estrcutura)*5); tampoco me funciona

 Quisiera saber como se le puede hacer para brincarse directamente a una determinada posicion sin necesidad de un ciclo.

dejo el codigo:


Código
#include <stdio.h>
#include <stdlib.h>
int total=0;
struct numeros{
      int num;
      struct numeros *sig;
      } *head=NULL, *final=NULL;
 
numeros *crear(int num)
{
       numeros *n=NULL;
       n=(numeros *) malloc(sizeof(numeros));
       n->num=num;
       n->sig=NULL;
       return n;
}
 
void insertar(int dato)
{
    numeros *n=crear(dato);
    if(head==NULL)
         head=final=n;
    else
    {
        final->sig=n;
        final=n;
    }
    total++;
}
 
int busqueda(int buscar)
{
   numeros *tmp=NULL;
   int inf=0;
   int sup=total;
   int centro=0;
   while(inf<=sup)
   {
      tmp=head;
      centro=(sup+inf)/2;
      tmp+=(sizeof(numeros)*centro); //tampoko funciona tmp+=centro;
      if((tmp->num)==buscar)
               return tmp->num;
      if((tmp->num)>buscar)
              sup=centro-1;
      else
         inf=centro+1;
   }
}
 
main()
{
     insertar(1);
     insertar(2);
     insertar(3);
     insertar(4);
     insertar(5);
     insertar(6);
     insertar(7);
     insertar(8);
     insertar(9);
     printf(" %d ",busqueda(3));
     system("pause");
}
 


En línea
Eliptico

Desconectado Desconectado

Mensajes: 153


Ver Perfil
Re: [?] Busqueda binaria en listas ligadas.
« Respuesta #1 en: 8 Julio 2009, 07:50 »

¡¡¡Buenas!!!

Pensaba decir que no se puede, pero realmente se me acaban de ocurrir dos formas en las que puedes hacerlo.

La primera seria mentener un vector dinamico con las direcciones de los elementos de la lista, y asi, puedes realizar la busqueda binaria no sobre la lista directamente, sino sobre el vector en el que guardas la direcciones.

La otra esta basada en la POO. Puedes declarar un estruct, como sigue:
Código
struct ListaInt
{
   int* Lista;
};
typedef struct ListaInt ListInt;
 
e implementar la insercion inicilaizacion de la lista (Lista=NULL), insercion de elementos, extraccion de elementos... utilizando asignacion dinamica de memoria sobre Lista. Para el usuario no habira diferencia en cuanto a funcionamiento, pero siendo que tienes un vectro dinamico, podria efectuar sobre el una busqueda binaria de elemnetos.

Sino, en principio, no se me ocurre otra forma de hacerlo sin que sea una busqueda que pase por cada elemento de la lista.

¡¡¡Un saludo!!!

PD: Tambien se me ocurre que podrias construir a partir de la lista un arbol binario y realizar la busqueda sobre el arbol


En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Busqueda binaria.
Java
NetJava 6 2,627 Último mensaje 28 Marzo 2011, 18:20
por NetJava
Busqueda binaria de un array desordenado « 1 2 »
Programación C/C++
David_RM 21 2,265 Último mensaje 13 Noviembre 2011, 16:55
por CobraCY
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines