Saturday, April 5, 2014

Hashing in C++ pseudo code

Tags

Hashing in C++  pseudo code

Hai Teman-teman,disini saya akan sharing sedikit tentang contoh program dari hashing in c++,
ini dia teman-teman codingannya:
Hashing In C++
#include<iostream>
#include<math.h>
#include<conio.h>
using namespace std;
typedef struct node
         { int data;
           struct node *next;
           } *list;
typedef struct node larik[101];
int s=0;
void BuatDataBeda(int x[101],int &n)
{ int i,j;bool ada;
  cout<<"banyak data : ";cin>>n;
  srand(time(NULL));
  for (i=1;i<=n;i++) {
    do {  
        x[i]=rand()%100+1;
        j=i-1;ada=false;
        while (j>=1){
           if (x[i]==x[j]) {
              ada=true;j=0;
           } else j--;
         }
     } while (ada);
     cout<<x[i]<<" ";
  }
}   
long prima(int N)
{long p;
 bool prima;
 do {
  if ((N==2)||(N==3)) prima=true;
  else if ((N%2==0)||(N<2)) prima=false;
       else
       { p=3;prima=true;
                      do {
                         if ((N%p)==0)  prima=false; else p=p+2;
                        }
                      while ( prima && p<=(sqrt(N)+1));
       }
   if (!prima) N++;   
 } while (!prima);
 return N;
}
void hashing(int X[101],int N,larik H)
{ int IH,I,p,t;list Q,b;
  p=prima(N);
  for(int i=1;i<=p;i++) {
    H[i].data=0;H[i].next=NULL;
  }
  for(int i=1;i<=N;i++) {
      IH = X[i]%p+1;
      if (H[IH].data==0) H[IH].data=X[i];
      else {
        b=new node;b->data=X[i];b->next=NULL;
        if (H[IH].next==NULL) H[IH].next=b;
        else {
           Q=H[IH].next;
           while (Q->next!=NULL) Q=Q->next;
           Q->next=b;
        }         
      }
   }
   cout<<endl;
   for (int I=1;I<=p;I++) {
     cout<<I<<"  "<<H[I].data<<" ";
     if (H[I].data!=0) s++;
     if(H[I].next!=NULL) {
       Q=H[I].next;t=2;
       while(Q!=NULL) {s+=t;t++;
         cout<<Q->data<<" "; Q=Q->next;
         }  
     }
     cout<<endl;
  }
}
void cari(larik H,int N)
{int lokasi,a,i,p,k=1;list q;bool ada;
  cout<<"\nmasukkan data yg dicari : ";cin>>a;
   p=prima(N);
   i=a % p+1;ada=false;
   if ((H[i].data==a) && (a!=0)) {ada=true;lokasi=i;}
   else
     if (H[i].next!=NULL) {
       q=H[i].next;ada=false;
       while (q!=NULL &&  !ada) {
        if (q->data==a) {ada=true;lokasi=i;k++;} else {q=q->next;k++;}
        }
     } else  ada=false;
   if (ada) cout<<"data ada di "<<lokasi<<" ke "<<k;
   else cout<<"data tidak ada";
}
   
main()
{ int x[101],n;larik H;
  BuatDataBeda(x,n);
  cout<<endl;
  hashing(x,n,H);
  cout<<endl;
  cout<<"rata-rata : "<<(float)s/n;
  cari(H,n);
  getch();
}

Artikel Terkait


EmoticonEmoticon