import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class hashMap{
int size;
boolean state[];
int map[],fre[];
hashMap(int size){
this.size=size;
map=new int[size];
fre=new int[size];
state=new boolean[size];
}
int hashValue(int key){
return key%size;
}
void insert(int key){
int index=hashValue(key);
int start=index;
while(true){
if(!state[index]){
map[index]=key;
fre[index]=1;
state[index] = true;
System.
out.
println("Key Inserted"); return;
}
else if(map[index]==key){
fre[index]++;
System.
out.
println("Key Inserted"); return;
}
index=(index+1)%size;
if(index==start){
System.
out.
println("HashTable is Full"); return;
}
}
}
void delete(int key){
int index=hashValue(key);
int start=index;
while(true){
if(state[index] && map[index]==key){
state[index]=false;
System.
out.
println("Key Deleted"); return;
}
index=(index+1)%size;
if(index==start){
break;
}
}
System.
out.
println("Element not found"); }
int search(int key){
int index=hashValue(key);
int start=index;
while(true){
if(state[index] && map[index]==key){
return index;
}
index=(index+1)%size;
if(index==start) break;
}
return -1;
}
}
public class Main {
public static void main
(String[] args
) { Scanner sc
= new Scanner
(System.
in);
System.
out.
print("Enter hash map size: "); int size = sc.nextInt();
hashMap map = new hashMap(size);
while (true) {
System.
out.
println("\nChoose Operation:"); System.
out.
println("1. Insert"); System.
out.
println("2. Delete"); System.
out.
println("3. Search"); System.
out.
println("4. Exit"); System.
out.
print("Enter choice: "); int choice = sc.nextInt();
switch (choice) {
case 1:
System.
out.
print("Enter key to insert: "); int insertKey = sc.nextInt();
map.insert(insertKey);
break;
case 2:
System.
out.
print("Enter key to delete: "); int deleteKey = sc.nextInt();
map.delete(deleteKey);
break;
case 3:
System.
out.
print("Enter key to search: "); int searchKey = sc.nextInt();
int index = map.search(searchKey);
if (index != -1) {
System.
out.
println("Key found at index: " + index
); } else {
System.
out.
println("Key not found."); }
break;
case 4:
System.
out.
println("Exiting..."); sc.close();
return;
default:
System.
out.
println("Invalid choice."); }
}
}
}
CgppbXBvcnQgamF2YS51dGlsLio7CmltcG9ydCBqYXZhLmxhbmcuKjsKaW1wb3J0IGphdmEuaW8uKjsKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBoYXNoTWFwewoJaW50IHNpemU7Cglib29sZWFuIHN0YXRlW107CglpbnQgbWFwW10sZnJlW107CgkKCWhhc2hNYXAoaW50IHNpemUpewoJCXRoaXMuc2l6ZT1zaXplOwoJCW1hcD1uZXcgaW50W3NpemVdOwoJCWZyZT1uZXcgaW50W3NpemVdOwoJCXN0YXRlPW5ldyBib29sZWFuW3NpemVdOwoJfQoJaW50IGhhc2hWYWx1ZShpbnQga2V5KXsKCQlyZXR1cm4ga2V5JXNpemU7Cgl9Cgl2b2lkIGluc2VydChpbnQga2V5KXsKCQlpbnQgaW5kZXg9aGFzaFZhbHVlKGtleSk7CgkJaW50IHN0YXJ0PWluZGV4OwoJCXdoaWxlKHRydWUpewoJCQlpZighc3RhdGVbaW5kZXhdKXsKCQkJCW1hcFtpbmRleF09a2V5OwoJCQkJZnJlW2luZGV4XT0xOwoJCQkJc3RhdGVbaW5kZXhdID0gdHJ1ZTsKCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiS2V5IEluc2VydGVkIik7CgkJCQlyZXR1cm47CgkJCX0gCgkJCWVsc2UgaWYobWFwW2luZGV4XT09a2V5KXsKCQkJCWZyZVtpbmRleF0rKzsKCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiS2V5IEluc2VydGVkIik7CgkJCQlyZXR1cm47CgkJCX0KCQkJaW5kZXg9KGluZGV4KzEpJXNpemU7CgkJCWlmKGluZGV4PT1zdGFydCl7CgkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkhhc2hUYWJsZSBpcyBGdWxsIik7CgkJCQlyZXR1cm47CgkJCX0KCQl9Cgl9Cgl2b2lkIGRlbGV0ZShpbnQga2V5KXsKCQlpbnQgaW5kZXg9aGFzaFZhbHVlKGtleSk7CgkJaW50IHN0YXJ0PWluZGV4OwoJCXdoaWxlKHRydWUpewoJCQlpZihzdGF0ZVtpbmRleF0gJiYgbWFwW2luZGV4XT09a2V5KXsKCQkJCXN0YXRlW2luZGV4XT1mYWxzZTsKCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiS2V5IERlbGV0ZWQiKTsKCQkJCXJldHVybjsKCQkJfQoJCQlpbmRleD0oaW5kZXgrMSklc2l6ZTsKCQkJaWYoaW5kZXg9PXN0YXJ0KXsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCVN5c3RlbS5vdXQucHJpbnRsbigiRWxlbWVudCBub3QgZm91bmQiKTsKCX0KCWludCBzZWFyY2goaW50IGtleSl7CgkJaW50IGluZGV4PWhhc2hWYWx1ZShrZXkpOwoJCWludCBzdGFydD1pbmRleDsKCQl3aGlsZSh0cnVlKXsKCQkJaWYoc3RhdGVbaW5kZXhdICYmIG1hcFtpbmRleF09PWtleSl7CgkJCQlyZXR1cm4gaW5kZXg7CgkJCX0KCQkJaW5kZXg9KGluZGV4KzEpJXNpemU7CgkJCWlmKGluZGV4PT1zdGFydCkgYnJlYWs7CgkJfQoJCXJldHVybiAtMTsKCX0KfQpwdWJsaWMgY2xhc3MgTWFpbiB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU2Nhbm5lciBzYyA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkVudGVyIGhhc2ggbWFwIHNpemU6ICIpOwogICAgICAgIGludCBzaXplID0gc2MubmV4dEludCgpOwoKICAgICAgICBoYXNoTWFwIG1hcCA9IG5ldyBoYXNoTWFwKHNpemUpOwoKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuQ2hvb3NlIE9wZXJhdGlvbjoiKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIxLiBJbnNlcnQiKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIyLiBEZWxldGUiKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIzLiBTZWFyY2giKTsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI0LiBFeGl0Iik7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkVudGVyIGNob2ljZTogIik7CiAgICAgICAgICAgIGludCBjaG9pY2UgPSBzYy5uZXh0SW50KCk7CgogICAgICAgICAgICBzd2l0Y2ggKGNob2ljZSkgewogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIkVudGVyIGtleSB0byBpbnNlcnQ6ICIpOwogICAgICAgICAgICAgICAgICAgIGludCBpbnNlcnRLZXkgPSBzYy5uZXh0SW50KCk7CiAgICAgICAgICAgICAgICAgICAgbWFwLmluc2VydChpbnNlcnRLZXkpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJFbnRlciBrZXkgdG8gZGVsZXRlOiAiKTsKICAgICAgICAgICAgICAgICAgICBpbnQgZGVsZXRlS2V5ID0gc2MubmV4dEludCgpOwogICAgICAgICAgICAgICAgICAgIG1hcC5kZWxldGUoZGVsZXRlS2V5KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiRW50ZXIga2V5IHRvIHNlYXJjaDogIik7CiAgICAgICAgICAgICAgICAgICAgaW50IHNlYXJjaEtleSA9IHNjLm5leHRJbnQoKTsKICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBtYXAuc2VhcmNoKHNlYXJjaEtleSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiS2V5IGZvdW5kIGF0IGluZGV4OiAiICsgaW5kZXgpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiS2V5IG5vdCBmb3VuZC4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhpdGluZy4uLiIpOwogICAgICAgICAgICAgICAgICAgIHNjLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJbnZhbGlkIGNob2ljZS4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQo=