java指定查找职工信息_【算法与数据结构-java】哈希表实现员工信息的增删改查...

1 packagehashmap;2

3 importjava.util.Scanner;4

5 public classHashTab {6 public static voidmain(String[] args){7 Hash hashTab = new Hash(7);8 String key = "";9 Scanner scanner = newScanner(System.in);10 while (true){11 System.out.println("add: 添加雇员");12 System.out.println("list: 显示雇员");13 System.out.println("find: 查找雇员");14 System.out.println("del: 删除雇员");15 System.out.println("exit: 退出系统");16 key =scanner.next();17 switch(key){18 case "add":19 System.out.println("输入id");20 int id =scanner.nextInt();21 System.out.println("输入名字");22 String name =scanner.next();23 Emp emp = newEmp(id,name);24 hashTab.add(emp);25 break;26 case "list":27 hashTab.list();28 break;29 case "find":30 System.out.println("请输入要查找的id");31 id =scanner.nextInt();32 hashTab.findEmpById(id);33 break;34 case "del":35 System.out.println("请输入要删除的id");36 id =scanner.nextInt();37 hashTab.delEmpById(id);38 break;39 case "exit":40 scanner.close();41 System.exit(0);42 default:43 break;44 }45 }46

47 }48 }49

50 classHash{51 privateEmpLinkedList[] empLinkedListArray;52 private intsize;53

54 public Hash(intsize){55 this.size =size;56 empLinkedListArray = newEmpLinkedList[size];57 for (int i = 0; i < size; i++){58 empLinkedListArray[i] = newEmpLinkedList();59 }60 }61

62 public voidadd(Emp emp){63 int empLinkedListNo =hashFun(emp.id);64 empLinkedListArray[empLinkedListNo].orderAdd(emp);65 }66 public voidlist(){67 for (int i = 0; i < size; i++){68 empLinkedListArray[i].list(i);69 }70 }71

72 public void findEmpById(intid){73 int empLinkedListNO =hashFun(id);74 Emp emp =empLinkedListArray[empLinkedListNO].findEmpById(id);75 if (emp != null){76 System.out.printf("在第%d条链表中找到该雇员,id=%d\n",(empLinkedListNO+1),id);77 System.out.println("该雇员的信息为:id= "+emp.id+" name= "+emp.name);78 }else{79 System.out.println("在哈希表中没有找到该雇员");80 }81 }82

83 public void delEmpById(intid){84 int empLinkedListNO =hashFun(id);85 empLinkedListArray[empLinkedListNO].delEmpById(id);86 }87

88 public int hashFun(intid){89 //散列函数

90 return id %size;91 }92 }93

94 classEmp{95 public intid;96 publicString name;97 publicEmp next;98 public Emp(intid, String name){99 super();100 this.id =id;101 this.name =name;102 }103 }104

105

106 classEmpLinkedList{107 privateEmp head;108 public voidadd(Emp emp){109 //按顺序添加

110 if(head == null){111 head =emp;112 return;113 }114 Emp curEmp =head;115 while (true){116 if(curEmp.next == null){117 break;118 }119 curEmp =curEmp.next;120 }121 curEmp.next =emp;122 }123

124 public voidorderAdd(Emp emp){125 //按顺序添加员工信息

126 if (head == null){127 //空链表

128 head =emp;129 return;130 }131 if (head.id >emp.id){132 //如果头结点的id大于要插入的id,则将emp指向当前头结点,然后再把头结点置为emp

133 emp.next =head;134 head =emp;135 return;136 }137 if (head.id ==emp.id){138 //如果头结点的id等于要加入的id,则提示不能加入

139 System.out.printf("第%d号员工已经存在,不能加人\n", emp.id);140 return;141 }142 Emp curEmp =head;143 boolean flag = false;144 while (true){145 if(curEmp.next == null){146 break;147 }148 if(curEmp.next.id >emp.id){149 break;150 }else if (curEmp.next.id ==emp.id){151 flag = true;152 break;153 }154 curEmp = curEmp.next;//后移,遍历

155 }156 if(flag){157 System.out.printf("第%d号员工已经存在,不能加人\n", emp.id);158 }else{159 if (curEmp.next == null){160 //如果当前链表只有一个节点,则直接添加到最后161 //head = emp;

162 curEmp.next =emp;163 }else{164 //如果要插入的位置在节点中间

165 emp.next =curEmp.next;166 curEmp.next =emp;167 }168

169 }170 }171

172 public void list(intno){173 if(head == null){174 System.out.println("第"+(no + 1)+"条链表为空");175 return;176 }177 System.out.println("第"+(no+1)+"条链表的信息为:");178 Emp curEmp =head;179 while (true){180 System.out.printf(" => id=%d name=%s\t",curEmp.id,curEmp.name);181 if(curEmp.next == null){182 break;183 }184 curEmp =curEmp.next;185 }186 System.out.println();187 }188

189 public Emp findEmpById(intid){190 if (head == null){191 System.out.println("链表为空");192 return null;193 }194 Emp curEmp =head;195 while (true){196 if (curEmp.id ==id){197 break;198 }199 if(curEmp.next == null){200 curEmp = null;201 break;202 }203 curEmp =curEmp.next;204 }205 returncurEmp;206 }207

208 public void delEmpById(intid){209 //按照id删除员工信息

210 if (head == null){211 System.out.println("链表为空");212 return;213 }214 if (head.id ==id) {215 //如果头结点的id等于要删除的id,则将头结点指向下一个

216 head =head.next;217 //head = null;

218 return;219 }220

221 Emp curEmp =head;222 boolean flag = false;223 while (true) {224 if (curEmp.next == null) {225 break;226 }227 if (curEmp.next.id ==id) {228 flag = true;229 break;230 }231 curEmp = curEmp.next;//后移,遍历

232 }233 if(flag) {234 curEmp.next =curEmp.next.next;235 }else{236 System.out.println("没有找到第" + id + "号员工");237 }238 }239 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值