数据结构114-哈希表的扩容实现代码

简介: 数据结构114-哈希表的扩容实现代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>哈希表的封装</title>
</head>
<body>
    <script>
        function hashFunc(str, size) {
        var hashCode = 0;
        //霍纳算法
        for (var i = 0; i < str.length; i++) {
          hashCode = 37 * hashCode + str.charCodeAt(i);
        }
        var index=hashCode%size
        return index
      }
        function HashTable(){
            this.storage=[]
            this.count=0
            this.limit=7*2
            //方法 
            HashTable.prototype.put=function(key,value){
                //根据key获取对应的index
                var index=this.hashFunc(key,this.limit)
                //根据index取出对应的bucket
                var bucket=this.storage[index]
                //、
                if(bucket==null){
                    bucket=[],
                    this.storage[index]=bucket
                }
                for(var i=0;i<bucket.length;i++){
                    var tuple=bucket[i]
                    if(tuple[0]==key){
                        tuple[1]=value
                        return
                    }
                }
                bucket.push([key,value])
                this.count+=1
                //判断是否需要扩容
                if(this.count>this.limit*0.75){
                    this.resize(this.limit*2)
                }
            }
            HashTable.prototype.get=function(key){
                //
                var index=this.hashFunc(key,this.limit)
                //根据index取出对应的bucket
                var bucket=this.storage[index]
                if(bucket==null){
                    return null
                }
                for(var i=0;i<bucket.length;i++){
                    var tuple=bucket[i]
                    if(tuple[0]==key){
                       return tuple[1]
                    }
                }
                return null
            }
            HashTable.prototype.remove=function(key){
                var index=this.hashFunc(key,this.limit)
                //根据index取出对应的bucket
                var bucket=this.storage[index]
                if(bucket==null){
                    return null
                }
                for(var i=0;i<bucket.length;i++){
                    var tuple=bucket[i]
                    if(tuple[0]==key){
                    bucket.splice(i,1)
                    this.count--
                    return tuple[1]
                    if(this.limit>7&&this.count<this.limit*0.25){
                        this.resize(Math.floor(this.limit/2))
                    }
                }
                }
              return null
            }
            HashTable.prototype.isEmpty=function(key){
                return this.count==0
            }
            HashTable.prototype.size=function(key){
                return this.count
            }
            HashTable.prototype.resize=function(key){
                var oldStorage=this.storage
                //重置所有的属性
                this.storage=[]
                this.count=0
                this.limit=newLimit
                for(var i=0;i<bucket.length;i++){
                    var bucket=oldStorage[i]
                    if(bucket==null){
                        continue
                    }
                    for(var j=0;j<bucket.length;j++){
                    var tuple=bucket[j]
                    this.put(tuple[0],tuple[1])
                }
                }
            }
        }
    </script>
</body>
</html>
相关文章
|
6月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
181 1
|
算法 Java 数据库
数据结构与算法学习十五:哈希表
这篇文章详细介绍了哈希表的概念、应用实例、实现思路,并提供了使用Java实现的哈希表代码。
205 0
数据结构与算法学习十五:哈希表
|
7月前
|
存储 NoSQL Java
【数据结构进阶】哈希表
哈希表是一种高效的数据结构,通过哈希函数实现数据映射,支持平均O(1)时间复杂度的查找、插入和删除操作。本文详细介绍了哈希表的基本概念、哈希函数的设计(如直接定址法和除留余数法)以及哈希冲突的解决方法(如开放定址法和链地址法)。同时,文章通过代码实例展示了线性探测和链地址法两种哈希表的实现过程,并分析了各自的优缺点。最后总结指出,合理选择哈希函数和冲突解决策略是优化哈希表性能的关键。
544 2
|
10月前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
11月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
326 1
|
12月前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
125 1
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
244 0
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
82 0
|
算法
04(数据结构考研)串相关操作代码
04(数据结构考研)串相关操作代码
59 0
03(数据结构考研)队列相关操作代码
03(数据结构考研)队列相关操作代码
118 0

热门文章

最新文章