哈希表代码

1.Dome01----------------------------------------------------------------------------------------------------

`package hashTable;

import java.util.Scanner;

public class Dome01 {
public static void main(String[] args) {
HashTable hashTable = new HashTable(10);
while (true) {
System.out.println("-------请选择下列操作命令进行操作:--------");
System.out.println("添加学生输入:add");
System.out.println("遍历所有学生输入:list");
System.out.println("删除学生输入:del");
System.out.println("查找学生输入:find");
Scanner scanner = new Scanner(System.in);
String string = scanner.next();
switch (string) {
case "add":
System.out.println("请输入学生id:");
;
int id = scanner.nextInt();
System.out.println("请输入学生姓名:");
String name = scanner.next();
Student student = new Student(id, name);
hashTable.addStudent(student);
break;
case "list":
hashTable.listStudent();
break;
case "del":
System.out.println("请输入要删除的学生id:");
id = scanner.nextInt();
hashTable.delStudent(id);
break;
case "find":
System.out.println("请输入要查找的学生id:");
id = scanner.nextInt();
hashTable.findStudent(id);
break;
default:
scanner.close();
System.exit(0);
break;
}
}

}

}`

2.HashTable-----------------------------------------------------------------------------------------------

`package hashTable;

public class HashTable {
LinkTable[] hashTable;
int size;

public HashTable(int size) {
    this.size = size;
    hashTable=new LinkTable[size];
    for (int i=0;i<size;i++){
        hashTable[i]=new LinkTable();
    }
}

public void addStudent(Student student){
    int i=student.id%size;
    hashTable[i].addStudent(student);
}
public void listStudent(){
    for(int i=0;i<size;i++){
        hashTable[i].listStudent(i);
    }
}

public void findStudent(int id){
   int i=id%size;
   hashTable[i].findStudent(id);
}
public void delStudent(int id){
    int i=id%size;
    hashTable[i].delStudent(id);
}

}
`

3.LinkTable-----------------------------------------------------------------------------------------------

package hashTable;

public class LinkTable {
Student head;

public void addStudent(Student student) {
    if (head == null) {//添加第一个学生
        head = student;
        return;
    }
    Student s = head;//媒介
    while (true) {//添加非第一个学生
        if (s.next == null) {//说明到了最后一个位置了,我们在最后一个位置插入。
            s.next = student;//添加学生到链表。
            break;
        }
        s = s.next;//没到最后位置就后移
    }
}

public void listStudent(int i) {//遍历链表学生
    if (head == null) {//链表为空
        System.out.printf("第%d个链表为空:",i+1);
        System.out.println("");//每条链表打印的时候就换行隔开
        return;
    }
    System.out.printf("第%d个链表学生依次为:",i+1);
    Student s = head;
    while (true) {
        System.out.printf("==>> id=%d name=%s",s.id,s.name);
        if(s.next==null){//到了最后一个学生
            break;
        }else{
            s=s.next;//后移
        }
    }
    System.out.println("");//每条链表打印的时候就换行隔开
}

public void findStudent(int id) {//遍历链表学生
    if (head == null) {//链表为空
        System.out.printf("id=%d的学生所在的链表为空,所以该学生不存在\n",id);
        return;
    }
    Student s = head;
    while (true) {
        if(s.id==id) {
            System.out.printf("已找到该学生的信息: id=%d name=%s\n", s.id, s.name);
            break;
        }
        if(s.next==null){//到了最后一个学生
            System.out.printf("id=%d的学生不存在\n",id);
            break;
        }else{
            s=s.next;//后移
        }
    }
}

public void delStudent(int id) {//删除id对应的学生
    if (head == null) {//链表为空
        System.out.printf("id=%d的学生所在的链表为空,所以该学生不存在,删除失败\n",id);
        return;
    }
    Student s = head;//辅助指针
    Student front=head;//当前学生的前一个学生
    //能到这里至少说明该链表有一个学生。
    //------------第一个元素有点特殊,和后面的元素分开写--------------
    if(s.id==id){//表明第一个就是要删除的对象
        if(s.next==null){//第一个也是最后一个元素
            head=null;//现在该链表任何学生都没有了
            //这里可以写点东西把垃圾清除了
        }else{//第一个元素后面还有很多元素,由于把第一个元素删了,于是把head指向第二个元素
            head=head.next;
        }
        System.out.println("删除成功\n");
        return;
    }else{//表明第一个不是就是要删除的对象
       s= s.next;
    }
    //--------------中间元素---------------
    while (true) {
        if(s.id==id){
            front.next=s.next;//删除
            System.out.println("删除成功\n");
            return;
        }
        if(s.next==null){
            System.out.println("很遗憾遍历了整个链表都未能找到对应的学生,学生不存在!\n");
            return;
        }
        s=s.next;
        front=front.next;
    }
}

}

4.Student-----------------------------------------------------------------------------------------------

package hashTable;

public class Student {
int id;
String name;
Student next;

public Student(int id, String name) {
    this.id = id;
    this.name = name;
}

}

posted on 2022-10-09 16:21  我乃涉外周杰伦  阅读(86)  评论(0)    收藏  举报

导航