ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

go 数据结构与算法

2022-06-11 01:32:17  阅读:91  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有