In this homework you will write two functions. The first implements a deleting function over a binary search tree, and the second implements Hashing function stored in a array with sequential search to diambiguate collissions.
What to do
Instructions
Start with deleteTree.
deleteMin works by following the longest left chain without an empty.
Linear hashing works as follows.
-- Author : _________________ module InsertAndHash where import ArrCommands import Test.HUnit(Test(TestCase,TestList),assertEqual,runTestTT) import HashFunction data BinSearchTree a = Empty | Branch (BinSearchTree a) a (BinSearchTree a) deleteTree :: (Ord key) => key -> BinSearchTree (key,value) -> BinSearchTree (key,value) deleteTree key x = undefined deleteMin :: BinSearchTree a -> (a,BinSearchTree a) deleteMin tree = undefined testD = do { print testTree; putStrLn "\n"; print t1 } where testTree:: BinSearchTree (Int,Int) testTree = createTests [(7,1),(4,6),(9,2),(1,3),(6,5),(8,4)] t1 = deleteTree 6 testTree ------------------------------------------------------ -- Linear hashing insertHash:: (String,value) -> Array (Maybe(String,value)) -> IO () insertHash (key,value) arr = do { (low,hi) <- boundsArr arr ; let hashLoc = undefined ; insert (low,hi) hashLoc hashLoc (key,value) arr } insert:: (Int,Int) -> Int -> Int -> (String,value) -> Array (Maybe(String,value)) -> IO () insert (low,hi) hashLoc current (k,v) arr = undefined testH = do { table <- newArr (3,7) Nothing ; printArr table ; undefined -- include tests here } findHash:: String -> Array (Maybe(String,value)) -> IO (Maybe value) findHash key arr = undefined findH:: (Int,Int) -> Int -> Int -> String -> Array (Maybe(String,value)) -> IO(Maybe value) findH (low,hi) hashLoc current k arr = undefined ------------------------------------------------------------ -- This section Included so you can use it to create test -- data easily, and print out Trees. insertTree :: (Ord key) => (key,value) -> BinSearchTree (key,value) -> BinSearchTree (key,value) insertTree (k,v) Empty = Branch Empty (k,v) Empty insertTree (k,v) (Branch left (key,satelite) right) | k>=key = Branch left (key,satelite) (insertTree (k,v) right) | k < key = Branch (insertTree (k,v) left) (key,satelite) right createTests [] = Empty createTests ((k,v):more) = insertTree (k,v) (createTests more) showT n Empty = "" showT n (Branch left x right) = showT (n+3) right ++ replicate n ' ' ++ show x ++ "\n" ++ showT (n+3) left instance Show t => Show (BinSearchTree t) where show x = showT 0 x ------------------------------------------------------- main = undefined