标签:head 缓存 list Add Len 链表 算法 go 数据结构
go 数据结构与算法
1.1 链表
链表是一种数据结构,单向列表每个元素后面都有一个next指向下一个元素,双向列表还有一个prev指向上一个元素
我们定义一个链表:
func main() {
list := List{}
list.Add(1)
list.Add(8)
list.Add(4)
list.Add(3)
list.Add(5)
list.Travs()
}
//链表的一个元素
type Node struct{
Info int
Next *Node //自己套自己,形成链表
}
//链表
type List struct{
Head *Node
Len int
}
// 1 > 8 > 4 > 3 > 5
func (list *List) Add (ele int) {
node := &Node{Info: ele,Next: nil} //取指针,因为需要放到List里面去的
//如果长度为0,那么说明加的是第一个元素,直接用node赋值
if list.Len == 0 {
list.Head = node
} else {
head := list.Head
for i := 1;i < list.Len;i++ {
head = head.Next
}
head.Next = node
}
list.Len += 1
}
func (list List) Travs() {
if list.Len == 0 {
return
}
head := list.Head
fmt.Println(head.Info)
for i := 1;i < list.Len;i++{
head = head.Next
fmt.Println(head.Info)
}
}
链表的应用案例
链表的一个应用案例。LRU(Least Recently Used, 最近最少使用)缓存淘汰的总体思路:缓存的key放到链表中,头部的元素表示最近刚使用。
如果命中缓存,从链表中找到对应的key,移到链表头部。
如果没命中缓存:
- 如果缓存容量没超,放入缓存,并把key放到链表头部。
- 如果超出缓存容量,删除链表尾部元素,再把key放到链表头部。
标签:head,缓存,list,Add,Len,链表,算法,go,数据结构 来源: https://www.cnblogs.com/liwenchao1995/p/16365104.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。