You are on page 1of 13

HASH

#include<iostream>
#include<fstream>
#include<string.h>
#include<stdlib.h>
using namespace std;
#define maxrecord 100
char hashtable[maxrecord][30],buffer[30];
char tombstone[]={"####"};
class student
{
public:
char key[5],name[20],sem[2];
void read();
void pack();
void retrieve(int addr, char *);
void unpack(char []);
void initialize();
void store(int);
}s;
void student::initialize()
{
for(int i=0;i<maxrecord;i++)
strcpy(hashtable[i],tombstone);
return;
}

int hash(char key[])


{
int i=0,sum=0;
while(key[i]!='\0')
{sum+=key[i]-48;
i++;
}
return sum%99;
}
void student::read()
{
cout<<"enter key";
cin>>key;
cout<<"enter name";
cin>> name;
cout<<"enter semester";
cin>>sem;
return;
}
void student::pack()
{
strcpy(buffer,key);
strcat(buffer,"|");
strcat(buffer,name);
strcat(buffer,"|");
strcat(buffer,sem);

strcat(buffer,"|");
return;
}
void student::unpack(char buffer[])
{
int k=0,i;
for(i=0;buffer[i]!='|';i++)
key[k++]=buffer[i];
key[k]='\0';
k=0;
for(++i;buffer[i]!='|';i++)
name[k++]=buffer[i];
name[k]='\0';
k=0;
for(++i;buffer[i]!='|';i++)
sem[k++]=buffer[i];
sem[k]='\0';
return;
}
void store(int addr)
{
int flag=0,i;
if (strcmp(hashtable[addr],tombstone)==0)
{
strcpy(hashtable[addr],buffer);
flag=1;

cout<<"record is inserted at its home address"<<addr;


}
else
for(i=addr+1;i!=addr;i++)
{
if(i%maxrecord==0)
i=0;
if(strcmp(hashtable[i],tombstone)==0)
{
cout<<"collision has occured";
cout<<"home address"<<addr<<"actual address"<<i;
strcpy(hashtable[i],buffer);
flag=1;
break;
}}
if(i==addr&&(!flag))
cout<<"no space";
return;
}
void student::retrieve( int addr,char k[])
{
int found=0,i;
i=addr;
do
{
if(strcmp(hashtable[i],tombstone)==0)

break;
s.unpack(hashtable[i]);
if(strcmp(key,k)==0)
{
found=1;
break;
}
else{
i++;
if(i==maxrecord)
i=0;
}}

while(i!=addr);
if(found==0)
cout<<"record does not exist";
else cout<<"record found"<<key<<name<<sem;
return;
}
int main(void)
{
int ch,addr;
char key[5];
s.initialize();
while(1)
{

cout<<"1. store 2. retrieve3. exit";


cout<<"enter ur choice";
cin >>ch;
switch(ch)
{
case 1:s.read();
s.pack();
addr=hash(s.key);
store(addr);
break;
case 2: cout<<"enter key value";
cin >> key;
addr=hash(key);
s.retrieve(addr,key);
break;
default:exit(0);
}}
return(0);
}

MERGE

#include<stdlib.h>
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
class lists
{
public: char names[10][20];
int currele,size,over;
void readnames(int);
void merge();
int finish();
lists();
} l[8];
ifstream fin;
lists::lists()
{
over

=0;

currele=0;
}
void lists::readnames( int lst)
{
int i=0;

switch(lst)
{
case 0:
fin.open("list0.txt");
if(!fin)
{
cout<<"file can not be opened";
exit(0);
}
while(!fin.eof())
{

fin.getline(names[i++],20);

}
size=i-1;
fin.close();
break;
case 1:
fin.open("list1.txt");
if(!fin)
{
cout<<"file can not beopened";
exit(0);
}
while(!fin.eof())

{
fin.getline(names[i++],20);
}
size=i-1;
fin.close();
break;
case 2:
fin.open("list2.txt");
if(!fin)
{
cout<<"file can n";
exit(0);
}
while(!fin.eof())
{
fin.getline(names[i++],20);
}
size=i-1;
fin.close();
break;
case 3:
fin.open("list3.txt");
if(!fin)
{
cout<<"no";
exit(0);

}
while(!fin.eof())
{
fin.getline(names[i++],20);
}
size=i-1;
fin.close();
break;
case 4:
fin.open("list4.txt");
if(!fin)
{
cout<<"no";
exit(0);
}
while(!fin.eof())
{
fin.getline(names[i++],20);
}
size=i-1;
fin.close();
break;
case 5:
fin.open("list5.txt");
if(!fin)
{

cout<<"no";
exit(0);
}
while(!fin.eof())
{
fin.getline(names[i++],20);
}
size=i-1;
fin.close();
break;
case 6:
fin.open("list6.txt");
if(!fin)
{
cout<<"no";
exit(0);
}
while(!fin.eof())
{
fin.getline(names[i++],20);
}
size=i-1;
fin.close();
break;
case 7:
fin.open("list7.txt");

if(!fin)
{
cout<<"no";
exit(0);
}
while(!fin.eof())
{
fin.getline(names[i++],20);
}
size=i-1;
fin.close();
break;
}}
int main(void)
{
lists l[8];
int smalllist=0,i,st;
char firstname[20],secondname[20];
for(int k=0;k<8;k++)
l[k].readnames(k);

smalllist = 0;

for(;;)
{

for(i=0;i<8;i++)
{
if(l[0].over==1&&l[1].over==1&&l[2].over==1&&l[3].over==1&&l[4].over==1&&l[5].ov
er==1&&l[6].over==1&&l[7].over==1)
exit(0);

if ((l[i].over != 1) && (i != smalllist)) {

if (strcmp(l[smalllist].names[l[smalllist].currele],
l[i

].names[l[i

].currele]) > 0) {

smalllist = i;
}
}
}
cout << l[smalllist].names[l[smalllist].currele] << endl;
l[smalllist].currele++;
if (l[smalllist].currele >= l[smalllist].size) {
l[smalllist].over = 1;
if (smalllist < 7)
smalllist++;
}
}
return 0;
}

You might also like