队列结构定义如下:
// 队列结点
type QueNode struct {
Val interface{}
Next *QueNode
}
// 链式队列
type LinkedListQueue struct {
Head *QueNode
Tail *QueNode
Length int
}
实现以下操作:
- 新建队列
- 元素入队
- 元素出队
- 队列判空
- 队列遍历
代码如下:
package main
import "fmt"
// 队列结点
type QueNode struct {
Val interface{}
Next *QueNode
}
// 链式队列
type LinkedListQueue struct {
Head *QueNode
Tail *QueNode
Length int
}
// 新建队列
func NewLinkedListQueue() *LinkedListQueue {
return &LinkedListQueue{
Head: nil,
Tail: nil,
Length: 0,
}
}
// 入队
func (this LinkedListQueue) EnQueue(v interface{}) {
node := &QueNode{v, nil}
if this.Tail == nil {
this.Tail = node
this.Head = node
}else {
this.Tail.Next = node
this.Tail = node // 队尾始终指向队尾元素
}
this.Length++
}
// 出队
func (this *LinkedListQueue) Dequeue() interface{} {
if this.Head == nil {
return nil
}
v := this.Head.Val
this.Head = this.Head.Next
this.Length--
return v
}
// 判断队列是否为空
func (this *LinkedListQueue) Empty() bool {
return this.Tail == nil
}
// 返回队列元素
func (this *LinkedListQueue) String() string {
if this.Head == nil {
return "Empty queue!"
}
result := "head<-"
for cur := this.Head; cur != nil; cur = cur.Next {
result += fmt.Sprintf("<-%+v", cur.Val)
}
result += "<-tail"
return result
}
京公网安备 11010502036488号