Está en la página 1de 13

INSTITUTO TECNOLÓGICO SUPERIOR DE FELIPE CARRILLO PUERTO

Turno: Matutino

INGENIERÍA EN SISTEMAS COMPUTACIONALES

Estructura de datos

Unidad 6
Métodos de Búsqueda

PRACTICAS
1. Métodos de Búsqueda

GRUPO 3 A

José Enrique Echazarreta Méndez


Introducción de unidad 6
Métodos de Búsqueda
Al aplicar el método de búsqueda pertinente en la solución de un problema real. Debemos
tener algunas bases que podemos consultar en algunas fuentes.
Las búsquedas es la operación mas importante en el procesamiento de información ya
que permite recuperar datos previamente almacenados. El resultado de una búsqueda
puede ser exitoso, si se encuentra la información o un fracaso, si no la encuentra.
Unidad 6
Metodos de Busqueda

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>
#include<iostream>

using namespace std;

typedef struct no no_hash;

struct no
{
int data; //Valor del elemento.
int state; //Estados del
elemento: 0 para VACIO, 1 para
REMOVIDO e 2 para OCUPADO.
};

void secuencial(int A[], int n);


void binario( int B[], int n);
void hash(int C[], int n);
void borbuja(int D[], int n);

int i, n, r;
bool b=false, v=true;
int main(){
int o, c=0;
cout<<"\nBienvenid@ a este
programa donde podras usar los
diatintos metodos de busqueda\n\n";
cout<<"Para usar los distintos
metodos necesitamos tener datos,
este programa funciona con
numeros\n";
cout<<"Cuantos datos desea
ingresar?\n";
cout<<"Cantidad: ";
cin>>n;
int array[n];
for(i=0;i<n;i++){
cout<<"\nIngrese el dato
["<<i<<"]: ";
cin>>array[i];
}
do{
if(c==0){
system("cls");
}
if(c==1){
system("cls");
cout<<"\nSiga
correctamente las instrucciones\n";
}

if(c==1){
b=false;
}

cout<<"\nElija el metodo
de su preferencia para realizar la
busqueda de algun numero de los que
hay\n";
cout<<"Datos Ingresados:
";
for(i=0;i<n;i++){
cout<<array[i]<<" ";
}
cout<<"\n\nMetodos\n";
cout<<"1. Secuencial\n";
cout<<"2. Binaario\n";
cout<<"3. Hash\n";
cout<<"4. Salir\n";
cout<<"Opcion: ";
cin>>o;
if(o!=1 and o!=2 and o!=3
and o!=4){
c=1;
}else{
switch(o){
case 1:

cout<<"\nhas elejido el metodo


secuencial :) \n";

secuencial(array, n);

cout<<"\nRegresar al menu 1-
(Si) 2-(No):";
cin>>c;
break;
case 2:

cout<<"\nhas elejido el metodo


binario :) \n";

binario(array, n);

cout<<"\nRegresar al menu 1-
(Si) 2-(No): ";
cin>>c;
break;
case 3:
cout<<"\nhas elejido el metodo
hash :) \n";
hash(array,
n);

cout<<"\nRegresar al menu 1-
(Si) 2-(No): ";
cin>>c;
break;
case 4:
return 0;
default:
return 0;
}
}
}while(c==1);

return(0);

void secuencial(int A[], int n){


cout<<"Ingrese el numero que
quiere encontrar: ";
cin>>r;
for(i=0;i<n;i++){
if(A[i]==r and i<n){
cout<<"Dato
encontrado en la posicion "<<i+1;
b=true;
}
}
if(A[i]!=r and b==false){
cout<<"Lo sentimos al
parecer el dato no existente";
}
}

void binario(int B[], int n){


int inf, sup, mitad, j, Aux;

for (i=0; i<(n-1);i++){


for (j=0; j<(n-1)-i; j++){
if (B[j]>B[j+1]){
Aux=B[j];
B[j]=B[j+1];
B[j+1]=Aux ;
}
}
}
cout<<"Numeros ordenados: ";
for(i=0;i<n;i++){
cout<<B[i]<<" ";
}

cout<<"\nIngrese el numero que


quiere encontrar: ";
cin>>r;

inf=0;
sup=n;

while(inf<sup){
mitad=(inf+sup)/2;

if(B[mitad]==r){
b=true;
break;
}
if(B[mitad]>r){
sup=mitad;
mitad=(sup+inf)/2;
}
if(B[mitad]<r){
inf=mitad;
mitad=(sup+inf)/2;
}
}
if(b=true){
cout<<"el dato a sido
encontrado en la posicion "<<mitad;
}else{
cout<<"Lo sentimos el dato
no fue encontrado";
}
}

// Calcula la función de
distribución
int funcion(int k, int m, int i)
{
return ((k + i) % m);
}

// Crea la tabla Hash.


no_hash *Crea_Hash(int m)
{
no_hash *temp;
int i;
if((temp =
((no_hash*)malloc(sizeof(no_hash))))
!= NULL){
//Asigna al arreglo
temporal estados vacios.
for (i = 0; i < m; i++)
temp[i].state = 0;
return temp;
}
else{
exit(0);
}
}

// Inserta un elemento k en la tabla


T de dimension m.
void Inserta_Hash(no_hash *T, int m,
int k)
{
int j, i = 0;
do
{
j = funcion(k, m, i);
//Si posicion j de la tabla está
vacio || removido...
if (T[j].state == 0 || T[j].state ==
1)
{
//Asignale el valor k y coloca su
estado como ocupado.
T[j].data = k;
T[j].state = 2;
return;
}
else
i++;
}
while (i < m);
cout << "Tabla llena!"<<endl;
}
//Busca elemento k en la tabla de
Hash
int Busca_Hash(no_hash *T, int m,
int k, int i)
{
int j;
if (i < m)
{
j = funcion(k, m, i);
//Si el estado de la posicion j en
la tabla está vacio.
if (T[j].state == 0)
return -1;
//De lo contrario si la posición j
en la tabla está removido.
else
if (T[j].state == 1)
return Busca_Hash(T, m, k, i + 1);
//De lo contrario si clave de
busqueda y elemento de tabla
coinciden
//despliega mensaje de encontrado.
else
if (T[j].data == k)
{
cout<< "Numero "<< k << " encontrado
en la posicion ["<<j<<"]"<<endl;
return j;
}
else
return Busca_Hash(T, m, k, i + 1);
}
return -1;
}

void hash(int C[], int n){


int p, c, o;
no_hash *T;
//Crear arreglo dinamico.
int *arreglo = new int[n];
//Crea la tabla de Hash.
T = Crea_Hash(n);
//Ingreso de elementos a la
tabla.
for(c=0;c<n;c++){
arreglo[c] = C[c];
r = arreglo[c];
Inserta_Hash(T, n, r);
}
cout << endl;
//Mostrar tabla de Hash.
cout << "Mostrar tabla de Hash"
<< endl;
cout << endl;

for (i=0;i<n;i++)
{
cout << "Posicion
["<<i<<"]: "<<T[i].data << endl;
}
cout << endl;

cout << "Ingrese el numero a


ser buscado: ";
cin >> r;
o = Busca_Hash(T, n, r, 0);

//Si no lo encuentra despliega


mensaje.
if (o == -1)
cout << "Numero no
encontrado!"<<endl;
//Liberar memoria de arreglo
dinamico.
delete[] arreglo;
system("pause");

}
Conclusión unidad 6

Es que se conoció cada uno de los tipos de métodos de búsqueda ya que al momento de
hacer un programa extenso podrimos utilizar algunos de estos métodos y asi encontrar la
información más rápida y perder tanto tiempo.

También podría gustarte