我爱编程

golang队列queue的实现

2018-06-03  本文已影响1817人  maxZhang

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-------")
}

上一篇下一篇

猜你喜欢

热点阅读