Golang实现队列链式存储

2017-10-23  本文已影响0人  萧末

队列,顾名思义就是像排队一样,先来先到,先进先出。

type Elem int

type Node struct {

data Elem

next *Node

}

type QueueLink struct {

front  *Node // 对头

tail  *Node // 队尾

length int

}

func (q *QueueLink) InitQueue() {

q.front = new(Node)

q.tail = q.front

q.length = 0

}

func (q *QueueLink) EnQueue(e Elem) {

node := new(Node)

node.data = e

node.next = nil

q.tail.next = node

q.tail = node

q.length++

}

func (q *QueueLink) OutQueue(e *Elem) error {

if q.Empty() {

return errors.New("empty queue.")

}

node := q.front.next

*e = node.data

q.front.next = node.next

// 如果弹出的是队尾元素那么队列就空了,这个时候队尾等于队列

if q.tail == node {

q.tail = q.front

}

q.length--

return nil

}

func (q *QueueLink) Empty() bool {

return q.front == q.tail

}

func (q *QueueLink) Length() int {

return q.length

}

func (q *QueueLink) Destroy() {

q.front = nil

q.tail = nil

}

上一篇下一篇

猜你喜欢

热点阅读