【數據結構】建立哈希表並進行插入刪除查找元素操作

Description:

散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放記錄的數組叫做散列表。

本題請使用散列函數:除留餘數法(取關鍵字被某個不大於散列表表長m的數p除後所得的餘數爲散列地址)建立哈希表,並判斷給定值是否在散列表中。

注意:本題請考慮衝突情況,即碰撞。本題請使用鏈衝突法解決衝突,即散列到相同地址後以建立子鏈的方式解決元素衝突,因此本題不考慮總元素大於散列表大小而溢出的情況。重複元素只存一個。

Solution:

# Filename : hashTable.py
class hashTable():
    """docstring for hashT"""
    # 回頭再加註釋吧
    def __init__(self,size):
        self.table = [None] * size
        self.size=size
    #插入元素,使用鏈式方法
    def insert(self,value):
        index = value % self.size       # 哈希函數在此
        #print('value:',value,'  self.table[index]:',self.table[index])
        if value == self.table[index]:
            return True
        if isinstance(self.table[index],int):
            self.table[index] = [self.table[index]]
            self.table[index].append(value)
        elif isinstance(self.table[index],list):
            if value in self.table[index]:
                return True
            self.table[index].append(value)
        else:
            self.table[index] = value

    # 刪除表內元素
    def delete(self,value):
        index = value % self.size
        if self.table[index] == None:
            print('Delete Error')
            return False
        elif isinstance(self.table[index],int):
            if self.table[index] == value:
                self.table[index] = None
            else:
                print('Delete Error')
                return False
        elif isinstance(self.table[index],list):
            if value in self.table[index]:
                value_index = self.table[index].index(value)
                self.table[index][value_index] = None
            else:
                print('Delete Error')
            return False
    #搜索該元素是否存在
    def search(self,value):
        index = value % self.size
        if self.table[index] == None:
            return False
        elif isinstance(self.table[index],int):
            if self.table[index] == value:
                return True
            else:
                return False
        elif isinstance(self.table[index],list):
            if value in self.table[index]:
                return True
            else:
                return False
self.size = int(input())
table = hashTable(self.size)

inputdata = input().split()
data = list(map(int,inputdata))

for eachdata in data:
    table.insert(eachdata)
#print('table element:',table.table)

addmore = int(input())
for addelement in range(0,addmore):
    table.insert(int(input()))
#print('table element:',table.table)

deletesome = int(input())
for deleteit in range(0,deletesome):
    table.delete(int(input()))
#print('table element:',table.table)

searchit = int(input())
for searchit in range(0,searchit):
    print(table.search(int(input())))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章