본문 바로가기
cs/자료구조

[Hash]36. Hashing 구현

by 장인이 2021. 3. 10.

목차

1. class Hashtable

2. __main__

3. 예상 출력값

 

1. class Hashtable

 사실 python에서는 이미 hashing에 의해 작동되는 함수들이 많지만, cs를 공부하는 의미로 제작해 보도록 하겠습니다.

class Hashtable:
    def __init__(self):
        self.table = [None for _ in range(13)]
    
    def full(self)-> bool:
        tmp = True
        for i in self.table:
            if i==None:
                tmp = False
                break
        return tmp
    
    def put(self, key: int, value: str):
        if not(self.full()):
            while True:
                if self.table[key%13]==None:
                    self.table[key%13] = value
                    break
                else:
                    key += 1
    
    def delete(self, key: int)-> str:
        while True:
            if self.table[key%13]==None:
                print(f'There is no value in {key}')
                break
            else:
                if self.table[key%13] == False:
                    key += 1
                else:
                    tmp = self.table[key%13]
                    self.table[key%13] = False
                    return tmp
    
    def show(self):
        for i in self.table:
            if i!=None:
                if i!=False:
                    print(i)

 

2. __main__

if __name__ == '__main__':
    hashing = Hashtable()
    nums = [18, 41, 22, 44, 59, 32, 31, 73]
    nums_str = ['18!', '41!', '22!', '44!', '59!', '32!', '31!', '73!']
    for i in range(len(nums)):
        hashing.put(nums[i], nums_str[i])
    
    hashing.show()
    print(hashing.table)

 

3. 예상 출력값

'''
41!
18!
44!
59!
32!
22!
31!
73!
[None, None, '41!', None, None, '18!', '44!', '59!', '32!', '22!', '31!', '73!', None]
'''

 

전체 코드는 제 github에서 확인할 수 있습니다.

github.com/imgzon3/algorithm/blob/main/Hash/linear_hash_table.py

 

imgzon3/algorithm

Contribute to imgzon3/algorithm development by creating an account on GitHub.

github.com

댓글