Experiment 1 (1st)
Consider the telephone book database of N clients. Make use of a hash table
implementation to quickly look up a client's telephone number. Make use of two
collision handling techniques and compare them using the number of comparisons
required to find a set of telephone numbers.
CODE:
def tele_database():
phone_data = []
n = int(input("Enter Number of Clients :- "))
print("Enter Phone Numbers --\n")
for _ in range(n):
x = int(input("--> "))
phone_data.append(x)
return phone_data
def hash_function_1(key_ele, m_size):
h1 = key_ele % m_size
return h1
def hash_function_2(key_ele, m_size):
h2 = 1 + (key_ele % (m_size - 1))
return h2
def hashtable(ht):
print(f"\nHash Value \tKey")
for ele in range(len(ht)):
if ht[ele] != -1:
print(f"\n\t{ele} \t---> \t{ht[ele]}")
else:
print(f"\n\t{ele}")
phone_database = tele_database()
m = int(input("Enter Hash Table Size :- "))
hash_table = [-1] * m
opt = int(input("If collision occurs which collision resolution technique do you want to
use?\n\t1. Linear "
"Probing\n\t2. Double Hashing :- "))
for k in phone_database:
h_1 = hash_function_1(k, m)
if hash_table[h_1] == -1:
hash_table[h_1] = k
else:
if opt == 1:
while hash_table[h_1] != -1:
h_1 = (h_1 + 1) % m
hash_table[h_1] = k
elif opt == 2:
i=0
h_2 = hash_function_2(k, m)
while hash_table[h_1] != -1:
i += 1
h_1 = (h_1 + i * h_2) % m
hash_table[h_1] = k
hashtable(hash_table)
Output:
Experiment 2 (3)
A book consists of chapters, chapters consist of sections and sections consist of
subsections. Construct a tree and print the nodes. Find the time and space requirements
of your method
CODE:
#include <iostream>
#include <string.h>
using namespace std ;
struct node
{
char lable[20];
int ch_count;
struct node *child[10];
}*root;
class GT
{
public:
GT()
{
root=NULL;
}
void create_tree();
void display_tree(node *r);
};
void GT::create_tree()
{
int tbook,tchapter,i,j,k,l;
root=new node;
cout<<"Enter the name of the book: ";
cin>>root->lable;
cout<<"Enter Number of Chapter: ";
cin>>root->ch_count;
tchapter=root->ch_count;
for(i=0;i<tchapter;i++)
{
root->child[i]=new node;
cout<<"Enter Chapter "<<i+1<<" name: ";
cin>>root->child[i]->lable;
cout<<"Enter Number of Section in the Chapter: ";
cin>>root->child[i]->ch_count;
for(j=0;j<root->child[i]->ch_count;j++)
{
root->child[i]->child[j]=new node;
cout<<"Enter Section "<<j+1<<" name: ";
cin>>root->child[i]->child[j]->lable;
}
}
}
void GT::display_tree(node *r1)
{
int i,j,k,tchapter;
if(r1!=NULL)
{
cout<<"\n------------Book Hierarchy------------";
cout<<"\n Book Title: " <<r1->lable<<endl;
tchapter=r1->ch_count;
for(i=0;i<tchapter;i++)
{
cout<<"\n Chapter "<<i+1<<" : ";
cout<<r1->child[i]->lable;
cout<<"\n Section: ";
for(j=0;j<r1->child[i]->ch_count;j++)
{
cout<<" "<<r1->child[i]->child[j]->lable<<endl;
}
}
}
}
int main()
{
int choice;
GT gt;
while(1)
{
cout<<"--------------------"<<endl;
cout<<"Book Tree Creation"<<endl;
cout<<"--------------------"<<endl;
cout<<"1. Create"<<endl;
cout<<"2. Display"<<endl;
cout<<"3. Quit"<<endl;
cout<<"Enter the choice: ";
cin>>choice;
switch (choice)
{
case 1:
gt.create_tree();
break;
case 2:
gt.display_tree(root);
break;
case 3:
exit(1);
default:
cout << "Wrong Choice....!!!"<<endl;
}
}
}
OUTPUT:
Experiment 3
CODE:
#include <iostream>
#include<iomanip>
using namespace std;
class node
{
private:
int data;
node * next;
public:
node()
{
data = 0;
next = NULL;
}
friend class hashtab;
};
class hashtab
{
private:
node hashtable[20];
public:
hashtab()
{
for(int i=0;i<20;i++)
{
hashtable[i].data=0;
}
}
int hash(int x)
{
int address = x%20;
return address;
}
void insert(int x)
{
int index;
index = hash(x);
if (hashtable[index].data==0)
{
hashtable[index].data = x;
}
else
{
node *pNew = new node();
pNew-> data = x;
pNew -> next = hashtable[index].next;
hashtable[index].next = pNew;
}
}
void search(int x)
{ int flag;
int index;
index = hash(x);
if(hashtable[index].data !=0)
{
if(hashtable[index].data == x)
{
flag =1;
}
}
else
{
node * temp = hashtable[index].next;
while(temp != NULL)
{
if(temp->data !=x)
{
temp = temp->next;
}
}
}
if(flag ==1)
{
cout<<"Key is Found"<<endl;
}
else
{
cout<<"Key Not Found"<<endl;
}
}
void display()
{
cout<<"index"<<" "<<"data"<<endl;
for(int i= 0; i<20;i++)
{ cout<< setw(5)<<i<<" "<<hashtable[i].data;
node * temp = hashtable[i].next;
while(temp != NULL)
{
cout<<setw(5)<<temp->data;
temp = temp->next;
}cout<<endl;
}
}
};
int main()
{
node n;
hashtab h;
while(1)
{
cout<<" 1.Insert\n 2.Search\n 3.Display"<<endl;
int ch ;
cout<< "Enter Choice:" << "" ;
cin>>ch;
if (ch==1)
{
int n;
cout<<"How many elements you have to insert:"<<" ";
cin>>n;
int key;
for(int i =0;i<n;i++)
{
cout<<"Enter Key:" << "";
cin>>key;
h.insert(key);
}
}
else if (ch == 2)
{
int key;
cout<<"Enter Key:" << "";
cin>>key;
h.search(key);
}
else if(ch == 3)
{
h.display();
}
else
{
break;
}
}
return 0;
}
OUTPUT:
#include <iostream>
using namespace std;
class Node
{
private:
string title;
Node *left;
Node *right;
public:
Node(string title = "null")
{
this->title = title;
this->left = NULL;
this->right = NULL;
}
void display()
{
cout<<this->title;
}
friend class Binary_Tree;
};
class Binary_Tree
{
private:
Node * root;
public:
Binary_Tree()
{
root = NULL;
}
Binary_Tree(string title)
{
root = new Node(title);
}
void display()
{
if(root == NULL)
{
cout<<"Empty Book Record"<<endl;
return;
}
cout<<"Book Record for -> "<<root->title<<endl;
preOrder(root);
}
void addChapter(string chapter_name);
void addSection(string chapter_name, string section_name);
void addSubSection(string chapter_name, string section_name,string
sub_section_name);
void preOrder(Node *root);
Node *SearchLast(Node *start);
Node *Search(Node *start, string title);
};
Node * Binary_Tree::Search(Node *start, string title)
{
Node *pCur;
pCur = start;
if(pCur == NULL)
{
return NULL;
}
else
{
while(pCur!= NULL)
{
if(pCur->title==title)
{//found
return pCur;
}
pCur = pCur->right;
}
return NULL;
}
}
Node * Binary_Tree::SearchLast(Node *start)
{
Node *pCur;
pCur = start;
while(pCur->right != NULL)
{
pCur = pCur->right;
}
return pCur;
}
void Binary_Tree::preOrder(Node *root)
{
if(root!=NULL)
{
cout<<root->title<<endl;
preOrder(root->left);
preOrder(root->right);
}
}
void Binary_Tree::addChapter(string chapter_name)
{
if(root == NULL)
{
cout<<"Empty Book Record ---: Failed to add chapter "<<endl;
return;
}
else
{
Node *lastChapter = NULL,*Chapter;
Chapter = root->left;
if(Chapter == NULL)
{
root->left = new Node(chapter_name);
cout<<chapter_name<<" First chapter in the book "
<<root->title<<" added successfully "<<endl;
}
else
{
Chapter = Search(Chapter,chapter_name);
if (Chapter == NULL )
{
Chapter = root->left;
lastChapter = SearchLast(Chapter);
lastChapter->right = new Node(chapter_name);
cout<<chapter_name<<" Chapter in the book "<<root->title
<<" added successfully as a last chapter"<<endl;
}
else
{
cout<<"Error : Failed to add Chapter...duplicate chapter name"<<endl;
}
}
}
}
void Binary_Tree::addSection(string chapter_name, string section_name)
{
if(root == NULL)
{
cout<<"Empty Book Record ---: Failed to add Section"<<endl;
return;
}
else
{
Node *Chapter,*Section,*lastSection;
Chapter = root->left;
if(Chapter == NULL)
{
cout<<"No Chapters Present---: Failed to add Section "<<endl;
return;
}
else
{
Chapter = Search(Chapter,chapter_name);
if (Chapter == NULL )
{
cout<<"Error : Failed to add Section...chapter name not found"<<endl;
}
else
{
Section = Chapter->left;
if(Section == NULL)
{
Chapter->left = new Node(section_name);
cout<<section_name<<" First section in the chapter "
<<Chapter->title<<" added successfully "<<endl;
}
else
{
Section = Search(Section,section_name);
if(Section == NULL)
{
lastSection = SearchLast(Chapter->left);
lastSection->right = new Node(section_name);
cout<<section_name<<" section in the chapter "
<<chapter_name<<" added successfully as a last section"<<endl;
}
else
{
cout<<"Error: Duplicate section name ";
}
}
}
}
}
}
void Binary_Tree::addSubSection(string chapter_name, string section_name,string
sub_section_name)
{
if(root == NULL)
{
cout<<"Empty Book Record ---: Failed to add Sub - Section"<<endl;
return;
}
else
{
Node *Chapter,*Section,*subSection,*lastSubSection;
Chapter = root->left;
if(Chapter == NULL)
{
cout<<"No Chapters Present---: Failed to add Sub - Section "<<endl;
return;
}
else
{
Chapter = Search(Chapter,chapter_name);
if (Chapter == NULL )
{
cout<<"Error : Failed to add Sub - Section...chapter name "
<<chapter_name<<" not found"<<endl;
return;
}
else
{
Section = Chapter->left;
if(Section == NULL)
{
cout<<"Error : Failed to add Sub-Section...No Sections added in chapter"
<<chapter_name<< " yet "<<endl;
return;
}
else
{
Section = Search(Section,section_name);
if(Section == NULL)
{
cout<<"Error : Failed to add Sub - Section...Section"
<<section_name<<" not found "<<endl;
return;
}
else
{
subSection = Section->left;
if(subSection == NULL)
{
Section->left = new Node(sub_section_name);
cout<<sub_section_name<<" First Sub - Section in the Section "
<<section_name<<" of "<<chapter_name<<" added successfully "
<<endl;
}
else
{
subSection = Search(subSection,sub_section_name);
if(subSection == NULL)
{
lastSubSection = SearchLast(Section->left);
lastSubSection->right = new Node(sub_section_name);
cout<<sub_section_name<<" sub section in the section "
<<section_name<<" of chapter" <<chapter_name
<<" added successfully as a last section"<<endl;
}
else
{
cout<<"Error: Duplicate sub section name ";
}
}
}
}
}
}
}
}
int main()
{
string book_name;
cout<<"Enter the Book Name : ";cin>>book_name;
Binary_Tree b(book_name);
string chapter_name,section_name,subsection_name;
int choice;
do{
cout<<"***** M E N U *****"<<endl;
cout<<"1. Add Chapter "<<endl<<"2. Add Section "<<endl
<<"3. Add Sub-Section"<<endl<<"4. Display
"<<endl
<<"5. Exit
"<<endl;
cout<<"Enter your choice : ";cin>>choice;
switch(choice)
{
case 1:
cout<<"Enter Chapter Name ";cin>>chapter_name;
b.addChapter(chapter_name);
break;
case 2:
cout<<"Enter Chapter Name ";cin>>chapter_name;
cout<<"Enter Section Name ";cin>>section_name;
b.addSection(chapter_name,section_name);
break;
case 3:
cout<<"Enter Chapter Name ";cin>>chapter_name;
cout<<"Enter Section Name ";cin>>section_name;
cout<<"Enter Sub-Section Name ";cin>>subsection_name;
b.addSubSection(chapter_name,section_name,subsection_name);
break;
case 4:
b.display();
break;
default:
cout<<"Enter choice between 1..5"<<endl;
}
}while(choice != 5);
return 0;
}
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )