IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 实现哈希表hashTable -> 正文阅读

[数据结构与算法]实现哈希表hashTable

package hashtable;
//哈希表实现,雇员.
public class HashTableDemo {

}
//雇员信息类
class Emp{
	public int id;
	public String name;
	public Emp next;
	public void Emp(int id,String name) {
		this.id = id;
		this.name = name;
	}
}
//雇员链表
class EmpLinkedList{
	//头节点
	private Emp head;
	
	//添加雇员信息,相当于尾插法
	public void add(Emp emp) {
		if(head == null) {
			head =emp;
			return;
		}
		//辅助指针,当前指针
		Emp cur = head;
		while(true) {
			if(cur.next==null) {
				break;
			}
			cur = cur.next;
		}
		//while结束后,说明到了最后一个节点,将emp加入链表
		cur.next = emp;
	}
	
	//遍历雇员信息
	public void list(int no) {
		if(head == null) {
			System.out.println("第"+(no+1)+"链表为空");
			return;
		}
		System.out.println("当前链表信息为");
		Emp cur = head;
		while(true) {
			System.out.printf("==>id=%d name=%s\t",cur.id,cur.name);
			if(cur.next == null) {
				break;
			}
			cur = cur.next;
		}
		System.out.println();
	}
	//通过id遍历雇员信息
	public Emp findEmpById(int id) {
		if(head == null) {
			System.out.println("链表为空");
			return null;
		}
		Emp cur = head;
		while(true) {
			if(cur.id == id) {//如果找到
				break;
			}
			//如果没找到结束条件为
			if(cur.next == null) {
				//因为上一个if和当前if说明现在这个节点也不是,并且已经是最后一个节点了
				cur = null;//这个设置只是给下面用来return的。
				break;
			}
			cur = cur.next;
		}
		return cur;
		
	}
	
}

//HashTable
class HashTable{
	private EmpLinkedList[] empLinkedListArray;
	private int size;
	//构造函数
	public void HashTable(int size) {
		//初始化empLinkedListArray
		empLinkedListArray = new EmpLinkedList[size];
		//初始化每个链表
		for(int i=0;i<size;i++) {
			 empLinkedListArray[i] = new EmpLinkedList();
		}
	}
	//添加雇员
	public void add(Emp emp) {
		//先通过散列函数得到应该放在哪个链表中,再添加emp
		empLinkedListArray[hashFun(emp.id)].add(emp);	
	}
	//编写散列函数
	public int hashFun(int id) {
		return id % size;
	}
	//遍历hashtable
	public void list() {
		for(int i =0;i<size;i++) {
			empLinkedListArray[i].list(i);
		}
	}
	//通过id查找雇员信息
	public void findEmpById(int id) {
		//确定在哪条链表no
		int no = hashFun(id);
		Emp emp =empLinkedListArray[no].findEmpById(id);
		if(emp!=null) {
			System.out.printf("在第%d条链表中找到==>id=%d name = %s\n", (no+1),id,emp.name);
		}else {
			System.out.println("在哈希表中没有改雇员信息");
		}
	}
}

调用过程外部调用table里的方法,table里的数组点方法即调用list里的方法。?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:58:41  更:2021-12-11 15:59:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:32:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码