哈希表

package chapter06 import util.control.Breaks._ object test01 { def main(args:Array[String]):Unit={ val hashTable = new HashTable(5) //创建EMP val emp1 = new Emp(5,"aa") val emp2 = new Emp(6,"bb") val emp3 = new Emp(7,"cc") val emp4 = new Emp(10,"dd") val emp5 = new Emp(14,"ee") val emp6 = new Emp(3,"ff") val emp7 = new Emp(1,"gg") hashTable.addEmp(emp1) hashTable.addEmp(emp2) hashTable.addEmp(emp3) hashTable.addEmp(emp4) hashTable.addEmp(emp5) hashTable.addEmp(emp6) hashTable.addEmp(emp7) hashTable.list() hashTable.findEmpById(10) hashTable.findEmpById(8) } } //Emp类 class Emp(empNo:Int,empName:String){ val no = empNo var name = empName var next:Emp = null } //编写EmpLinkedList,存放雇员信息 class EmpLinkedList{ var head:Emp = null //添加雇员(添加到最后) def addEmp(emp:Emp):Unit={ if(head ==null){ //链表为空 head = emp }else{ var curEmp = head //定位到链表的最后 breakable{ while (true) { if (curEmp.next == null) { break() } curEmp = curEmp.next } } curEmp.next = emp } } //遍历链表 def list(no:Int):Unit={ //判断链表是否为空 if(head == null){ println("链表 "+no+" 为空,无法遍历") return }else{ //辅助指针 var curEmp = head print("链表 "+no+" 情况为 ") breakable { while (true) { printf("no=%d name=%s ==>", curEmp.no, curEmp.name) if (curEmp.next == null) { break() } curEmp = curEmp.next } } } } //查询一个雇员 def findEmp(no:Int):Emp={ var curEmp = head if (head ==null){ println("链表为空,查询不到") } breakable { while (true) { if (curEmp.no == no) { break() } if (curEmp.next == null) { curEmp = null break() } curEmp = curEmp.next } } return curEmp } } //编写HashTable类 class HashTable(size:Int){ val empLinkedListArr = new Array[EmpLinkedList](size) //需要将每个链表new for(i <- 0 until size){ empLinkedListArr(i)=new EmpLinkedList() } //定义哈希方法(散列函数) def hash(no:Int):Int={ no % size } //往数组添加链表元素 def addEmp(emp:Emp):Unit={ //数组Index var empLinkedListArrNo: Int = hash(emp.no) //链表添加元素 empLinkedListArr(empLinkedListArrNo).addEmp(emp) } //遍历 def list():Unit={ for(i <- 0 until size){ empLinkedListArr(i).list(i) println() } } //查找一个雇员 def findEmpById(no:Int):Unit={ //数组Index var empLinkedListArrNo: Int = hash(no) val emp: Emp = empLinkedListArr(empLinkedListArrNo).findEmp(no) if(emp != null){ println("找到链表:"+empLinkedListArrNo+" id:"+emp.no +" 姓名: "+emp.name) }else{ println("没有找到") } } }
posted on 2020-08-28 15:49 happygril3 阅读(136) 评论(0) 收藏 举报
浙公网安备 33010602011771号