-
Notifications
You must be signed in to change notification settings - Fork 0
/
DSA_A1.cpp
156 lines (125 loc) · 3.49 KB
/
DSA_A1.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*A1-Consider telephone book database of N clients. Make use of a hash table implementation
to quickly look up client‘s telephone number. Make useof two collision handling techniques
and compare them using number of comparisons required to find a set
of telephone numbers*/
# include <iostream>
# include<string.h>
using namespace std ;
struct node{
int value;
node* next;
};
class hashing{
public:
node* HashTable[10];
hashing(){
for (int i=0 ; i<10 ; i++){
HashTable[i]=NULL;
}
}
int HashFunction(int value ){
return(value%10);
}
node* create_node(int x){
node* temp = new node;
temp->next = NULL;
temp-> value = x;
return temp;
}
void display(){
for (int i=0 ; i<10 ; i++){
node*temp = new node;
temp = HashTable[i];
cout<<"a["<<i<<"]:";
while(temp != NULL){
cout<<"->"<<temp->value;
temp=temp->next;
}
cout<<"\n";
}
}
int searchElement(int value){
bool flag = false;
int hash_val= HashFunction(value);
node* entry = HashTable[hash_val];
cout<<"\nElement found at: ";
while(entry != NULL){
if (entry-> value == value){
cout<<hash_val<<":"<<entry->value<<endl;
flag=true;
}
entry=entry->next;
}
if (!flag)
return -1;
}
void deleteElement(int value){
int hash_val=HashFunction(value);
node* entry = HashTable[hash_val];
if (entry == NULL ){
cout<<"no element found";
return;
}
if(entry->value==value){
HashTable[hash_val]=entry->next;
return ;
}
while((entry->next)->value != value){
entry = entry->next;
}
entry->next = (entry->next)->next;
}
void insertElement(int value){
int hash_val= HashFunction(value);
//node*prev = NULL;
//node*entry = HashTable[hash-val];
node*temp = new node;
node* head = new node;
head = create_node(value);
temp = HashTable[hash_val];
if (temp==NULL){
HashTable[hash_val]=head;
}
else{
while(temp->next != NULL){
temp = temp->next;
}
temp->next= head;
}
}
};
int main(){
int ch;
int data;
int search,del;
hashing h;
do{
//fflush(stdin);
cout<<"\nTelephone : \n1.insert \n2.display \n3.search \n4.delete \n5.exit"<< endl;
cout<<"Enter your choice : "<<endl;
cin>>ch;
switch(ch){
case 1:cout<<"\nEnter phone no. to be inserted : ";
cin>>data;
h.insertElement(data);
break;
case 2:h.display();
break;
case 3:cout<<"\nEnter the no to be searched : ";
cin>>search;
if (h.searchElement(search)==-1){
cout<<"No element found at key ";
continue;
}
break;
case 4:cout<<"\nEnter the phno. to be deleted : ";
cin>>del;
h.deleteElement(del);
cout<<"phno. deleted"<<endl;
break;
default :cout<<"invalid case"<<endl;
break;
}
}while(ch!= 5);
return 0;
}