基础篇——Go语言队列实现

本文介绍了Go语言如何实现队列数据结构,包括队列的先进先出特性,使用切片进行实现,提供了新建、入队、出队、判断空队列及获取队列大小的方法。还给出了项目源代码地址和参考教程链接。
理论介绍

队列(queue), 是一种先进先出的线性表。通常用数据或者链表来实现队列。 队列只允许在后端插入,前端删除操作。
性质:
先进先出

代码实现

了解了队列的概念,实现一个队列也相当简单,下面看代码

package queue

type Item interface {
}

// Item the type of the queue
type ItemQueue struct {
    items []Item
}

type ItemQueuer interface {
    New() ItemQueue
    Enqueue(t Item)
    Dequeue() *Item
    IsEmpty() bool
    Size() int
}

// New creates a new ItemQueue
func (s *ItemQueue) New() *ItemQueue {
    s.items = []Item{}
    return s
}

// Enqueue adds an Item to the end of the queue
func (s *ItemQueue) Enqueue(t Item) {
    s.items = append(s.items, t)
}

// dequeue
func (s *ItemQueue) Dequeue() *Item {
    item := s.items[0] // 先进先出
    s.items = s.items[1:len(s.items)]

    return &item
}

func (s *ItemQueue) IsEmpty() bool {
    return len(s.items) == 0
}

// Size returns the number of Items in the queue
func (s *ItemQueue) Size() int {
    return len(s.items)
}

在代码中,我们使用go语言切片实现了一个队列,并且提供了以下几种方法
- New 新建一个队列
- Enqueue 入队,也就是给队列添加元素
- Dequeue 出队,从队列中取出元素
- IsEmpty 判断队列是否为空
- Size 求队列的大小

测试代码
package queue

import "testing"

var q ItemQueue

func initQueue() *ItemQueue  {
    if q.items == nil{
        q = ItemQueue{}
        q.New()
    }

    return &q
}

func TestItemQueue_Enqueue(t *testing.T) {
    q := initQueue()
    q.Enqueue(1)
    q.Enqueue(2)
    q.Enqueue(3)

    if size := q.Size(); size != 3{
        t.Errorf("wrong count, the correct count is 3 but got %d", size)
    }
}

func TestItemQueue_Dequeue(t *testing.T) {
    q.Dequeue()

    if size := q.Size(); size != 2{
        t.Errorf("test failed, the corrected value is 2, but got %d", size)
    }

    q.Dequeue()
    q.Dequeue()
    if !q.IsEmpty(){
        t.Errorf("the queue should be empty.")
    }
}
项目地址
参考教程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值