Code
def __init__(self, initialSize=5, maxLoadFactor=.5, maxChainLength=3):
'''store the parameters as class variables'''
self.initialSize = initialSize
self.maxLoadFactor = maxLoadFactor
self.currLoadFactor=0
self.maxChainLength = maxChainLength
self.m=initialSize
self.hashtable = []
'''initialize all slots in the hashtable to None'''
for i in range(self.initialSize):
self.hashtable.append(None)
def insert(self, item):
if self.contains(item)==True:
print("Insert error: duplicate item")
return False
else:
slotNum=item%(self.m)
if self.hashtable[slotNum]==None:
self.currLoadFactor=self.currLoadFactor+1
self.hashtable[slotNum]=LinkedList()
self.hashtable[slotNum].add(item)
if self.currLoadFactor>=self.maxLoadFactor:
self.hashtable.resize(2(self.m))
else:
self.hashtable[slotNum].add(item)
if len(self.hashtable[slotNum])>=self.maxChainLength:
self.hashtable.resize(2(self.m))
return True
def contains(self, item):
isIn=False
slotNum=item%(self.m)
if self.hashtable[slotNum]!=None:
isIn=(self.hashtable[slotNum]).search(item)
return isIn
def resize(self, newSize):
h = []
for i in range(newSize):
h.append(None)
for i in range(self.m):
if self.hashtable[i] != None:
linkList=self.hashtable[i]
current=linkList.head
for i in range (length(linkList)):
h.insert(current.getData())
current=current.getNext()
self.m=newSize
self.hashtable=h
def remove(self, item):
if self.hashtable.contains(item)==False:
return None
else:
slotNum=item%(self.m)
self.hashtable[slotNum].remove(item)
if self.hashtable[slotNum].length==0:
self.hashtable[slotNum]=None
if self.m>self.initialSize and self.currLoadFactor<=(.5*self.maxLoadFactor):
self.hashtable.resize(int(.5*self.m))
return item
def getNumItems(self):
numItems=len(self.hashtable.getAllItems())
return numItems
def getAllItems(self):
allItems=[]
currNode=0
for i in range(len(self.hashtable)):
if self.hashtable[i]!=None:
linkList=self.hashtable[i]
cur=linkList.head
for i in range(length(linkList)):
allItems.append(cur.getData())
cur=cur.getNext()
return allItems
def size(self):
return self.m
def isEmpty(self):
empty=False
for i in range(self.m):
if i==None:
empty=True
else:
return False
return empty
def getLinkListStats(self):
longestLen=0
numOfZero=0
totalLen=0
numofChains=0
for i in range(len(self.hashtable)):
if self.hashtable[i]==None:
numOfZero=numOfZero+1
numofChains=numofChains+1
else:
linkList=self.hashtable[i]
totalLen=totalLen+length(self.hashtable[i])
numofChains=numofChains+1
if length(linkList)>longestLen:
longestLen=length(linkList)
return longestLen,numOfZero,(totalLen/numofChains)
def displayStats(self):
return self.m, self.hashtable.getNumItems(),self.currLoadFactor,self.hashtable.getLinkListStats()
Is my code and I'm getting this error
Code
Traceback (most recent call last):
File "E:/Python Stuff/172/TestHashTable.py", line 7, in <module>
table.insert(0)
File "E:/Python Stuff/172\HashTable.py", line 29, in insert
self.hashtable.resize(2(self.m))
AttributeError: 'list' object has no attribute 'resize'