DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   C (http://www.daniweb.com/forums/forum118.html)
-   -   hash- linear probing (http://www.daniweb.com/forums/thread100844.html)

its.romi Dec 12th, 2007 2:44 pm
hash- linear probing
 
im a student of 2nd year BS, doing my BS in Computer Science.
Here I want to include a program by me, may be someone will be helped by me :)
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

int* createHashTable(void);
void getData(void);
void formatting(void);
int insertData(int);
float chkLoadFactor(int, int);
int collision_LinearProbing(int, int,int);
int generateKey(int);
void rehashing(void);

#define dataSize 15
#define empty -1
#define fail 0
#define success 1

int dataArray[dataSize];
int hashSize = 5;
int* head;
int* cur;

void main(void)
{
      int count, status;
      int filledSpaces = 0;
      float loadFactor = 0;
      clrscr();
      formatting();
      getData();
      head = createHashTable();
      for( count = 0; count < dataSize ; count++)
      {
                if(loadFactor > 0.5)
                        rehashing();
              status =        insertData(dataArray[count]);
              if(status == success)
                        filledSpaces++;
              loadFactor = chkLoadFactor(status, filledSpaces);

              if(loadFactor <= 0.5)
                        printf("LF aftr %d is = %f\t", dataArray[count], loadFactor);

              if(status == fail)
                        printf("\nNo room left for  %d\n", dataArray[count]);
      }
      cur = head;
      printf("\n\nHash Table content = [");
      for(count = 0; count < hashSize ; count++)
      {
                printf("%d, ", *cur);
                cur++;
      }
      printf("\b\b]");
      getch();
}

int* createHashTable(void)
{
        int i;

/********************** Allocating Memory for Hash Table *********************/

        head = (int*)malloc(sizeof(hashSize*2));
        cur = head;

/********************** Initialize HashTable *********************************/

        for( i = 0; i <=hashSize; i++)
        {
                *cur = empty;
                cur++;
        }
        cur = head;
        return(head);
}

void getData(void)
{
        int i;
        randomize();
        printf("\n");
        printf("Data[]={");
        for(i =0; i < dataSize; i++)
        {
                dataArray[i] = random(50);
                printf("%d,", dataArray[i]);
        }
        printf("\b}\n\n");
}

void formatting(void)
{
        int i;
        printf("\n");
        for(i =0; i<=79 ; i++)
                printf("*");

        printf("\n......... Prgogram title\t\t# Hash Table");
        printf("\n......... Created by\t\t        # Romasa Qasim");
        printf("\n......... Description\t\t        # Creation of Hash Table, generation of,");
        printf("\t\t\t\t\t  Key, Insertion, Searching and Deletion");
        printf("\t\t\t\t\t  of data in the Hash Table\n");

        for( i =0; i<=79 ; i++)
                printf("*");
}

int insertData(int data)
{
        int hashIndex,count = 0;
        hashIndex = generateKey(data);
        if( *(head+hashIndex) == empty)
        {
                *(head+hashIndex) = data;
                return(success);
        }

        else
                return(collision_LinearProbing((++hashIndex%hashSize), count, data));

}

float chkLoadFactor(int status, int filledSpaces)
{
        float loadFactor;
        if (status == success)
        {
                loadFactor = filledSpaces / (float)hashSize;
                return(loadFactor);
        }
        else
                return(1);
}


int collision_LinearProbing(int hashIndex, int count, int data)
{
        if(count == hashSize)
                return(fail);

        if (*(head+hashIndex) == empty)
        {
                *(head+hashIndex) = data;
                return(success);
        }
        else
        {
                collision_LinearProbing((++hashIndex % hashSize), ++count, data);
        }

}

int generateKey(int data)
{
        int key;
        key = data % hashSize;
        return(key);
}

void rehashing(void)
{
        int count;
        int status;
        hashSize = hashSize * 2;
        head = (int*)realloc(head, sizeof(hashSize*2));

        for( count = 0; count <hashSize; count++)
        {
                *(head+count) = -1;
        }
        for(count = 0; count < dataSize; count++)
        {
                status = insertData(dataArray[count]);
        }
}

Jishnu Dec 13th, 2007 5:48 am
Re: hash- linear probing
 
Hey, we appreciate your goodwill but this is not the way to do so. Go to 'contribute code' in the 'code snippets' section. Forums are meant only for problem solving.

Salem Dec 13th, 2007 6:58 am
Re: hash- linear probing
 
I think I got to 10 bugs, then stopped counting.


All times are GMT -4. The time now is 4:06 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC