Strona główna > Tablice Hashujace > Tablice Hashujace C

Tablice Hashujace C

26 Czerwiec 2011 Dodaj komentarz Go to comments
//Tablice HASH(ujace) 
#include <stdio.h>
#include <stdlib.h>

/*************************************************/
/**********************HASH**********************/     

int Hash (int element)
{
    int prime=29;//dowolna liczba pierwsza
    return (element%prime);
}

int Rehash(int el)
{//funkcja do pracy na tablicy
    int prime=29;
    return ((el+1)%prime);
}

/*************************************************/
/*******************obsluga listy****************/

typedef struct lista{
        int key;
        struct lista *next;
}lista;

void wstaw_do_listy (lista **head, int element)
{
     lista *nowy, *tmp;
     nowy = (lista *)malloc(sizeof(lista));
     nowy->key=element;
     nowy->next=NULL;

     if(*head==NULL){
        *head=nowy;
        return;
        }
     tmp=*head;
     while (tmp->next!=NULL)
           tmp=tmp->next;
     tmp->next=nowy;
}

void wstawL(lista **Tablica, int element)
{
     int pozycja=Hash(element);
     wstaw_do_listy(&Tablica[pozycja],element);
}

/*-------------------------------------------*/  

lista *szukaj_w_liscie(lista **head, int element)
{
      lista *tmp;
      tmp=*head;
      while (tmp!=NULL && tmp->key!=element){
      tmp=tmp->next;}
      return tmp;
}

int szukajL(lista **Tablica, int element)
{
    int pozycja=Hash(element);
    lista *tmp;
    tmp=szukaj_w_liscie(&Tablica[pozycja],element);
    if(tmp==NULL)
    printf("Brak elementu %d w liscie...\n", element);
    else
    printf("Znaleziono element %d \n",tmp->key);
}

/*************************************************/
/*****************OBSLUGA TABLICY****************/

void wstawT(int element,int *Tablica)
{
     int pozycja=Hash(element);
     printf("%d\n",pozycja);
     while(Tablica[pozycja]!=0)
     {/*az znajdzie wolne miejsce*/
         pozycja=Rehash(pozycja);
     }
     Tablica[pozycja]=element;
     //ponizej pomocny print by zrozumiec istote hashowania
     /*
     printf("\t\tjesli %d sie powtorzylo to ma nowa
     pozycje: %d\n",element, pozycja);
     */
}

int szukajT(int element, int *Tablica)
{
     int pozycja=Hash(element);
     while((Tablica[pozycja]!=0)&&(Tablica[pozycja]!=element))
     {
        pozycja=Rehash(pozycja);
     }
   return Tablica[pozycja];
}

/*************************************************/
/**********************main**********************/

int main()
{
    lista *Tablica[29]={0};//dla obslugi listy
    int TAB[500]={0};//dla obslugi tablicy
    //dodawanie i szukanie z listy
    //przykladowe dane
    wstawL(Tablica,5);
    wstawL(Tablica,8);
    szukajL(Tablica,5);
    szukajL(Tablica,9);
    //dodawanie i szukanie z tablicy
    wstawT(4,TAB);wstawT(6,TAB);
    wstawT(6,TAB);wstawT(7,TAB);
    printf("\n\n%d\n", szukajT(4,TAB));
    printf("%d\n", szukajT(6,TAB));
    printf("%d\n", szukajT(89,TAB));
    printf("%d\n", szukajT(7,TAB));
    system("PAUSE");
    return 0;
}
  1. Brak komentarzy.
  1. 12 Sierpień 2016 o 5:04 pm

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: