leetcode LRU Cache Golang

栏目: 编程工具 · 发布时间: 7年前

package main

import(
	"fmt"
)

type Node struct {
	Key string
	Val string
	Pre *Node
	Next *Node

}

type DLinkedList struct {
	Head *Node
	Tail *Node
}

func (self *DLinkedList) IsEmpty() bool {
	if self.Head == nil && self.Tail == nil {
		return true
	} else {
		return false
	}
}

func (self *DLinkedList) RemoveLast() {
	if self.Tail != nil {
		self.Remove(self.Tail)
	}
}

func (self *DLinkedList) Remove(n *Node){
	if self.Tail == self.Head {
		self.Head = nil
		self.Tail = nil
		return
	}
	if n == self.Head {
		n.Next.Pre = nil
		self.Head = n.Next
		return
	}
	if n == self.Tail {
		n.Pre.Next = nil
		self.Tail = n.Pre
		return
	}
	n.Pre.Next = n.Next
	n.Next.Pre = n.Pre
}

func (self *DLinkedList) AddFirst(n *Node) {
	if self.Head == nil {
		self.Head = n
		self.Tail = n
		n.Pre = nil
		n.Next = nil
		return
	}
	n.Next = self.Head
	self.Head.Pre = n
    self.Head = n
    n.Pre = nil

}

type LRUCache struct {
	Cap int
	Size int
	HashMap map[string]*Node
	Cache *DLinkedList
}

func (self *LRUCache) Get(k string) string {
	if node,ok := self.HashMap[k]; ok {
		self.Cache.Remove(node)
		self.Cache.AddFirst(node)
		return node.Val
	} else {
		return ""
	}
}

func (self *LRUCache) Set(k,val string ) {
	if 	node,ok := self.HashMap[k];ok {
		self.Cache.Remove(node)
		node.Val = val
		self.Cache.AddFirst(node)
	} else {
		n := &Node{Key:k,Val:val}
		self.HashMap[k] = n
		self.Cache.AddFirst(n)
		self.Size = self.Size + 1
		if self.Size > self.Cap {
			self.Size = self.Size - 1
			delete(self.HashMap,self.Cache.Tail.Key)
			self.Cache.RemoveLast()
		}
	}
}

func main() {

	cache := new(LRUCache)
	cache.Cap = 3
	cache.HashMap = make(map[string]*Node,0)
	cache.Cache = new(DLinkedList)

	cache.Set("allen","value")
	cache.Set("a","value")
	cache.Set("b","value")
	cache.Set("c","value")

	test := cache.Get("allen")

	fmt.Println(test)
	fmt.Println(cache.HashMap)
	fmt.Println(cache.Cache)
	fmt.Println(cache.Size)

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法

数据结构与算法

许卓群、杨冬青、唐世渭、张铭 / 高等教育出版社 / 2004-1 / 29.50元

《数据结构与算法》把数据结构的原理和算法分析技术有机地结合在一起,系统地介绍了各种类型的数据结构和排序、检索的各种算法,还引入了一些比较高级的数据结构及相关的算法分析技术。.《数据结构与算法》分为基本数据结构、排序和检索、高级数据结构三部分。借助抽象数据类型,从逻辑结构的角度系统地介绍了线性表、字符串、二叉树、树和图等各种基本数据结构;从算法的角度讨论排序、检索和索引算法;从应用的角度介绍了一些复......一起来看看 《数据结构与算法》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具