Go 分布式学习利器(11)-- Go语言通过单链表 实现队列
生活随笔
收集整理的這篇文章主要介紹了
Go 分布式学习利器(11)-- Go语言通过单链表 实现队列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一個小實驗,將之前學習的Go相關的語法做個總結。
包括:
- Go語言接口特性
- Go語言封裝特性
- Go語言 變量,指針,函數 語法
- GO語言 條件和循環(huán)語句 的語法
- GO語言的測試程序
通過鏈表實現一個隊列,元素在其中 擁有先進先出的特性。
簡單實用。
package data_structureimport ("fmt""testing"
)/*隊列的結構體,一個是數據,一個是指針
*/
type Queue struct{data intNext *Queue
}var mq *Queue // 用作隊列的頭節(jié)點
var endMq *Queue // 用作隊列尾節(jié)點的上一個節(jié)點,方便插入/*通過可變參數 : node ... int 來直接構造隊列
*/
func (q *Queue)Create(node ... int) bool {if len(node) == 0{return false}mq = new(Queue)mq.Next=nilendMq = mqfor _,n := range node{newQueueNode := new(Queue)newQueueNode.data = n/*鏈表的頭插法,可以用來構造棧*///newQueueNode.Next = mq.Next//mq.Next = newQueueNode/*鏈表的尾插法,可以用來構造隊列*/endMq.Next = newQueueNodeendMq = newQueueNode}endMq.Next = nilreturn true
}/*向隊列中添加元素
*/
func (q *Queue)Push(node int) {newQueueNode := new(Queue)newQueueNode.data = nodeendMq.Next = newQueueNodeendMq = newQueueNodeendMq.Next = nil
}/*隊列判空
*/
func (q *Queue)IsEmpty() bool {if mq.Next != nil {return false} else {return true}
}/*隊列的大小
*/
func (q *Queue)Size() int {if mq.Next == nil{return 0}l := 1var newQueue *QueuenewQueue = mq.Nextfor newQueue.Next!= nil {l ++newQueue = newQueue.Next}return l
}/*從隊列中彈出元素
*/
func (q *Queue)Pop() bool {if mq.Next != nil{mq = mq.Nextreturn true}return false
}/*打印當前隊列中的元素
*/
func (q *Queue)Print() {n := 1var newHead *QueuenewHead = mq.Nextfor newHead.Next != nil {fmt.Printf("node%d: %d\n",n,newHead.data )n++newHead = newHead.Next}fmt.Printf("node%d: %d\n",n,newHead.data )
}/*測試代碼
*/
func TestQueue(t *testing.T) {var Q *QueueQ = new(Queue)t.Log("Create queue : 1,2,3")Q.Create(1,2,3)Q.Print()Q.Push(2)t.Log("Push 2")Q.Print()t.Log("Size ", Q.Size())t.Log("Pop ",Q.Pop())Q.Print()t.Log("Size ", Q.Size())
}
輸出如下:
=== RUN TestQueuequeue_test.go:104: Create queue : 1,2,3
node1: 1
node2: 2
node3: 3queue_test.go:109: Push 2
node1: 1
node2: 2
node3: 3
node4: 2queue_test.go:111: Size 4queue_test.go:113: Pop true
node1: 2
node2: 3
node3: 2queue_test.go:116: Size 3
--- PASS: TestQueue (0.00s)
PASS
總結
以上是生活随笔為你收集整理的Go 分布式学习利器(11)-- Go语言通过单链表 实现队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江山代有才人出的下一句是什么啊?
- 下一篇: LSM 优化系列(四) -- Rock