Day.12 Queue

Queue(队列)是一种先进先出(FIFO)的资料结构

平常在超市排队是一样,先进来排的人愈早结帐,这观念很好懂。
在系统的设计上,面对一些大拼发的情境,很常会加入一些Queue的机制,请求都先接下来放到Queue里面,系统再以自己的速度来消化。
或是Golang的channel,也是队列的一种应用哦!

以下来实作~
Queue这边会用链结来做,方便我在取完队列中的第一位,後面的资料都要往前进一位,如果用slice来做,在pop的时候时间复杂度为O(n),但用链结的复杂度为O(1)。

程序:

type ListNode struct {
	Data int       
	Next *ListNode 
}

type Queue struct {
	nodes *ListNode
	tail  *ListNode
}

func (q *Queue) Push(val int) {
	if q.nodes == nil {
		q.nodes = &ListNode{
			Data: val,
		}
		q.tail = q.nodes

		return
	}

    // 加在队列的最後
	q.tail.Next = &ListNode{
		Data: val,
	}
    // 更新最後的节点
	q.tail = q.tail.Next
}

func (q *Queue) Pop() int {
	val := q.nodes.Data
	q.nodes = q.nodes.Next // 第一位移掉

	return val
}

明天来换个主题,讲Hash map~


<<:  JavaScript学习日记 : Day8 - 作用域(Scope)

>>:  Day11表格(HTML)

历行性邮件_范本建立

历行性的邮件报告,主旨和内容,一样的都要再打一次,要找之前那封,不好找.很花时间. 想到一个方法 历...

第十九天:初探 Gradle Plugins

Plugin 可以做什麽? 将 Plugin 套用於专案後,可以扩增专案的能力,它可以做到如: 扩充...

问这个问题会不会被当笨蛋?到底什麽才叫对的问题?

一切烦脑都来自於人际关系。 -阿德勒 从毕业到现在,最让我纠结的,莫过於问问题这件事了。 常常会想...

部署model on seldon(MinIO)

上一篇我们已使用notebook已经将训练好的model上传到MinIO储存空间, 本篇我们将使用s...

Re: 新手让网页 act 起来: Day18 - React Hooks 之 useRef

前言 探索完 useState 与 useEffect ,今天就让我们回来继续介绍其他的 React...