El tema de la búsqueda en una estructura de datos de algún elemento en específico es un tema recurrente que se tiene en la algoritmia y en la programación. El algoritmo más básico de todos es la búsqueda secuencial que nos permitirá recorrer una lista o un arreglo desde el inicio hasta el fin y para hasta que se pueda encontrar el elemento buscado o que se arribe el final de la estructura, lo cual indicará que no se ha encontrado nada. 

 

En este caso pondré a su disposición el algoritmo escrito en C, el cual preguntará primero por el número de entradas  sobre las que se va a buscar, y posteriormente se generará una arreglo del tamaño indicado y será llenado con datos aleatorios. 

Posteriormente se preguntará al usuario que elemento se intentará buscar, a lo que se ejecutará un ciclo que intentará encontrar este elemento. Si se encuentra devolverá la posición dentro del arreglo en la cual podemos encontrarlo. A continuación presentaré el código:

/* 
* Author: Jesús Manuel Mager Hois
* Licence: GPL v.3
* 2015
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_SIZE_VISIBLE 100
int main(int argc, char **argv)
{
    int *a;
    int size, n, i, j;

// Obtenemos el número de elementos a buscar
    printf("Entre cuantos números queremos buscar? ");
    scanf("%d", &size);

// Reservamos el espacio para el arreglo según el tamaño que nos indicaron
    a = malloc(size * sizeof(int));

// Generamos la semilla para números aleatorios y llenamos el arreglo
    srand(time(
NULL));
    for(i=0;i<size;i++)
    {
        a[i]=rand()/1000;
    }

// Imprimirmos el arreglo
    if(size<MAX_SIZE_VISIBLE)
    {
        for(i=0;i<size;i++)
        {
            printf("%d: %d\n",i,a[i]);
        }
    }

// Obtenemos el número a buscar.
    printf("Que numero desea buscar ");
    scanf("%d", &n);
    j = 0;

// recorremos el arreglo en búsqueda del elemento. Si se encuentra se imprime la posición
    for(i=0;i<size;i++)
    {
        if( a[i]==n )
        {
            printf("%d se encuentra en la posición %d\n",n,i);
            j = 1;
            return 0;
        }
    }
// Si no se encontró número al finalizar el ciclo no existe este número en el arreglo.
    if(!j)
    {
        printf("No se encontro el número\n");
    }
 
// Debemos liberar el arreglo que habíamos reservado.
    free(a);
    return 0;
}

 Para compilar este código se puede usar cualquier compilador ANSI C99. En lo particular prefiero el uso de GCC o clang. En gcc podrémos hacerlo de la siguiente manera:

$ gcc seq.c -o seq

Y para enseñar su uso, pondré una simple entrada y salida del programa. Espero haya sido útil este código.

$ ./seq
Entre cuantos números queremos buscar? 6
0: 1857870
1: 812207
2: 1360568
3: 669897
4: 1864005
5: 841012
Que numero desea buscar 812207
812207 se encuentra en la posición 1

 

Share This