mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-10-31 18:37:48 +08:00 
			
		
		
		
	 1c0f350ad6
			
		
	
	1c0f350ad6
	
	
	
		
			
			* Add the intial translation of code of all the languages * test * revert * Remove * Add Python and Java code for EN version
		
			
				
	
	
		
			118 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| File: array_hash_map.py
 | |
| Created Time: 2022-12-14
 | |
| Author: msk397 (machangxinq@gmail.com)
 | |
| """
 | |
| 
 | |
| 
 | |
| class Pair:
 | |
|     """Key-value pair"""
 | |
| 
 | |
|     def __init__(self, key: int, val: str):
 | |
|         self.key = key
 | |
|         self.val = val
 | |
| 
 | |
| 
 | |
| class ArrayHashMap:
 | |
|     """Hash table based on array implementation"""
 | |
| 
 | |
|     def __init__(self):
 | |
|         """Constructor"""
 | |
|         # Initialize an array, containing 100 buckets
 | |
|         self.buckets: list[Pair | None] = [None] * 100
 | |
| 
 | |
|     def hash_func(self, key: int) -> int:
 | |
|         """Hash function"""
 | |
|         index = key % 100
 | |
|         return index
 | |
| 
 | |
|     def get(self, key: int) -> str:
 | |
|         """Query operation"""
 | |
|         index: int = self.hash_func(key)
 | |
|         pair: Pair = self.buckets[index]
 | |
|         if pair is None:
 | |
|             return None
 | |
|         return pair.val
 | |
| 
 | |
|     def put(self, key: int, val: str):
 | |
|         """Add operation"""
 | |
|         pair = Pair(key, val)
 | |
|         index: int = self.hash_func(key)
 | |
|         self.buckets[index] = pair
 | |
| 
 | |
|     def remove(self, key: int):
 | |
|         """Remove operation"""
 | |
|         index: int = self.hash_func(key)
 | |
|         # Set to None, representing removal
 | |
|         self.buckets[index] = None
 | |
| 
 | |
|     def entry_set(self) -> list[Pair]:
 | |
|         """Get all key-value pairs"""
 | |
|         result: list[Pair] = []
 | |
|         for pair in self.buckets:
 | |
|             if pair is not None:
 | |
|                 result.append(pair)
 | |
|         return result
 | |
| 
 | |
|     def key_set(self) -> list[int]:
 | |
|         """Get all keys"""
 | |
|         result = []
 | |
|         for pair in self.buckets:
 | |
|             if pair is not None:
 | |
|                 result.append(pair.key)
 | |
|         return result
 | |
| 
 | |
|     def value_set(self) -> list[str]:
 | |
|         """Get all values"""
 | |
|         result = []
 | |
|         for pair in self.buckets:
 | |
|             if pair is not None:
 | |
|                 result.append(pair.val)
 | |
|         return result
 | |
| 
 | |
|     def print(self):
 | |
|         """Print hash table"""
 | |
|         for pair in self.buckets:
 | |
|             if pair is not None:
 | |
|                 print(pair.key, "->", pair.val)
 | |
| 
 | |
| 
 | |
| """Driver Code"""
 | |
| if __name__ == "__main__":
 | |
|     # Initialize hash table
 | |
|     hmap = ArrayHashMap()
 | |
| 
 | |
|     # Add operation
 | |
|     # Add key-value pair (key, value) to the hash table
 | |
|     hmap.put(12836, "Ha")
 | |
|     hmap.put(15937, "Luo")
 | |
|     hmap.put(16750, "Suan")
 | |
|     hmap.put(13276, "Fa")
 | |
|     hmap.put(10583, "Ya")
 | |
|     print("\nAfter adding, the hash table is\nKey -> Value")
 | |
|     hmap.print()
 | |
| 
 | |
|     # Query operation
 | |
|     # Enter key to the hash table, get value
 | |
|     name = hmap.get(15937)
 | |
|     print("\nEnter student ID 15937, found name " + name)
 | |
| 
 | |
|     # Remove operation
 | |
|     # Remove key-value pair (key, value) from the hash table
 | |
|     hmap.remove(10583)
 | |
|     print("\nAfter removing 10583, the hash table is\nKey -> Value")
 | |
|     hmap.print()
 | |
| 
 | |
|     # Traverse hash table
 | |
|     print("\nTraverse key-value pairs Key->Value")
 | |
|     for pair in hmap.entry_set():
 | |
|         print(pair.key, "->", pair.val)
 | |
| 
 | |
|     print("\nIndividually traverse keys Key")
 | |
|     for key in hmap.key_set():
 | |
|         print(key)
 | |
| 
 | |
|     print("\nIndividually traverse values Value")
 | |
|     for val in hmap.value_set():
 | |
|         print(val)
 |