import java.util.Scanner;
public class HashTabDemo {
public static void main(String[] args) {
HashTab test=new HashTab(7);
Scanner scanner=new Scanner(System.in);
String key="";
while(true){
System.out.println("add: 添加雇员");
System.out.println("list: 显示雇员");
System.out.println("find: 查找雇员");
System.out.println("exit: 退出系统");
key=scanner.next();
switch (key){
case "add":
System.out.println("输入id");
int id = scanner.nextInt();
System.out.println("输入名字");
String name = scanner.next();
Emp emp=new Emp(id,name);
test.add(emp,id);
break;
case "list":
test.list();
break;
case "find":
System.out.println("请输入查找id:");
id=scanner.nextInt();
test.findEmp(id);
break;
case "exit":
scanner.close();
System.exit(0);
default:
break;
}
}
}
}
class HashTab{//数组
int size;
Linklist[] newList;
public HashTab(int size) {
this.size = size;
newList=new Linklist[size];
for(int i=0;i<size;i++){
newList[i] = new Linklist();
}
}
public int getNum(int num){
return num % size;
}
public void add(Emp emp,int id){
int a=getNum(id);
newList[a].add(emp,id);
}
public void list(){
for (int i=0;i<size;i++){
newList[i].list(i);
}
}
public void findEmp(int id){
int a=getNum(id);
Emp cur=newList[a].findEmp(id);
if (cur==null){
System.out.println("没有找到该员工");
}else {
System.out.println("员工id:" + cur.id + " 员工姓名:" + cur.name);
}
}
}
class Emp{//员工类
public int id;
public String name;
public Emp next;
public Emp(int id, String name) {
this.id = id;
this.name = name;
}
}
class Linklist{//单条链表
private Emp head;
public void add(Emp emp, int id) {
Emp cur = head;
if (head == null) {
head = emp;
return;
}
Emp newhead ;
boolean flag=true;
while (true) {
if (id<cur.id){
newhead=emp;
emp.next=cur;
head=newhead;
flag=false;
break;
}
if (cur.next == null) {//到最后了
break;
}
if (id < cur.next.id ) {
emp.next=cur.next;
cur.next = emp;
flag=false;
break;
}
cur = cur.next;
}
if (flag){
cur.next = emp;
}
}
public void list(int count){
if(head==null){
System.out.println("第"+(count+1)+"条链表为空");
return;
}
Emp cur=head;
while(true){
System.out.print(" ->id="+cur.id+" name="+cur.name);
if (cur.next==null){
break;
}
cur=cur.next;
}
System.out.println();
}
public Emp findEmp(int id){
if(head==null){
System.out.println("哈希表为空");
return null;
}
Emp cur=head;
while (true){
if (cur.id==id){
break;
}
if(cur.next==null){
cur=null;
break;
}
cur=cur.next;
}
return cur;
}
}
无头哈希表实现顺序插入
最新推荐文章于 2026-01-05 17:06:32 发布
831

被折叠的 条评论
为什么被折叠?



