queue实现依赖于前面的单链表的实现,内部维护的是一个单链表,最重要的特性就是满足先进先出
代码目录结构
具体的代码实现如下:
package queue
import "algorithm/linkedList"
/*
队列的特性较为单一,基本操作即初始化、获取大小、添加元素、移除元素等。
最重要的特性就是满足先进先出
*/
type Queue struct {
linkedList.List
}
//加入队列
func (this *Queue) Put(data linkedList.Object) {
this.Add(data)
}
//pop出队列
func (this *Queue) Pop() linkedList.Object {
if this.GetHeadNode() == nil {
panic("this queue is nil")
}
headNode := this.GetHeadNode()
this.RemoveAtIndex(0)
return headNode
}
//获得队列的长度
func (this *Queue) GetSize() linkedList.Object {
return this.GetSize()
}
对应的测试代码为:
package main
import (
"fmt"
"algorithm/queue"
)
func main() {
q := queue.Queue{}
q.Put("queue_1")
q.Put("queue_2")
travselQueue(&q)
q.Pop()
travselQueue(&q)
}
func travselQueue(q *queue.Queue) {
fmt.Println("-------queue----begin-------------")
//遍历
head := q.GetHeadNode()
for head != nil {
fmt.Println(head.Data)
head = head.Next
}
fmt.Println("-------queue------end-------")
}