go 哈希表——map的简单实现

2019-08-05  本文已影响0人  卖毛玉的小贩

哈希表

拉链法(链地址法)

实现步骤

  1. //1.首先定义结构体
    type MpNode struct {
     Data Dict    // 定义数据  数据为存放k v 的结构体
     Next *MpNode // 下个节点
    }
    type Dict struct {
     Key   string
     Value interface{}
    }
    
    //2 初始化
    //初始化链表的头节点
    func newNodeHead() *MpNode {
     node := new(MpNode)
     node.Data.Key = "头key"
     node.Data.Value = "头value"
     node.Next = nil
     return node
    }
    
    //链方法
    //3 封装结构体对象方法
    // 封装key value 存放方法
    func (node *MpNode) data(k string, v interface{}) *MpNode {
     if node == nil {
         node = newNodeHead()
     }
     node.Data.Key = k
     node.Data.Value = v
     return node
    }
    
    //4  向该链空节点创建新数据
    func (node *MpNode) add(k string, v interface{}) {
     // 首先判断k是否是该链已有的key  因为根据哈希算法简化后  同样的字符串会在同样的链里存放
     if node.getKey(k) != nil {
         return
     }
     //遍历到尾节点
     for node.Next != nil {
         node = node.Next
     }
     // 创建新的尾节点
     node.Next = node.Next.data(k, v)
    }
    

到这里我们已经初步实现了单链里存储key,value值

运行这个map吧!

上一篇 下一篇

猜你喜欢

热点阅读