leetcode LRU Cache Golang

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

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)

}

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

查看所有标签

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

数据库系统实现

数据库系统实现

加西亚-莫利纳(Hector Garcia-Molina)、Jeffrey D.Ullman、Jennifer Widom / 杨冬青、吴愈青、包小源 / 机械工业出版社 / 2010-5 / 59.00元

《数据库系统实现(第2版)》是斯坦福大学计算机科学专业数据库系列课程第二门课的教科书。书中对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分——存储管理器、查询处理器和事务管理器的实现技术。此外,第2版充分反映了数据管理技术的新进展,对内容进行了扩充,除了在第1版中原有的“信息集成”一章(第10章)中加入了新的内容外,还增加了两个全新的章:“数据挖掘”(第11章)和“数据......一起来看看 《数据库系统实现》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具