class
hash_node:
def
__init__(
self
, val, key):
self
.val
=
val
self
.key
=
key
self
.
next
=
None
self
.prev
=
None
class
HashMap:
def
__init__(
self
):
self
.tablesize
=
25
self
.hashtable
=
[
None
]
*
self
.tablesize
self
.top
=
[
None
]
*
self
.tablesize
def
HashFunc(
self
, key):
return
key
%
self
.tablesize
def
find(
self
, key):
hash_val
=
self
.HashFunc(key)
flag
=
False
entry
=
self
.hashtable[hash_val]
if
entry
is
not
None
:
while
entry
is
not
None
:
if
entry.key
=
=
key:
flag
=
True
if
flag:
print
(
"Element found at key"
, key,
":"
, entry.val)
entry
=
entry.
next
if
not
flag:
print
(
"No Element found at key"
, key)
def
remove(
self
, key):
hash_val
=
self
.HashFunc(key)
entry
=
self
.hashtable[hash_val]
if
entry
is
None
or
entry.key !
=
key:
print
(
"Couldn't find any element at this key"
, key)
return
while
entry
is
not
None
:
if
entry.
next
is
None
:
if
entry.prev
is
None
:
self
.hashtable[hash_val]
=
None
self
.top[hash_val]
=
None
del
entry
break
else
:
self
.top[hash_val]
=
entry.prev
self
.top[hash_val].
next
=
None
del
entry
entry
=
self
.top[hash_val]
entry
=
entry.
next
print
(
"Element was successfully removed at the key"
, key)
def
add(
self
, key, value):
hash_val
=
self
.HashFunc(key)
entry
=
self
.hashtable[hash_val]
if
entry
is
None
:
entry
=
hash_node(value, key)
self
.hashtable[hash_val]
=
entry
self
.top[hash_val]
=
entry
else
:
while
entry.
next
is
not
None
:
entry
=
entry.
next
new_entry
=
hash_node(value, key)
new_entry.prev
=
entry
entry.
next
=
new_entry
self
.top[hash_val]
=
new_entry
print
(
"Value"
, value,
"was successfully added at key"
, key)
if
__name__
=
=
'__main__'
:
hash_map
=
HashMap()
hash_map.add(
4
,
5
)
hash_map.find(
4
)
hash_map.remove(
4
)