版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yang731227/article/details/84990201
title: Go数据结构与算法-实现数组队列
tags: go,算法
介绍
队列(queue), 是一种先进先出的线性表。通常用数据或者链表来实现队列。 队列只允许在后端插入,前端删除操作。队列我们可以想象我们平时排队买票的情况,排在第一位的先买到票,先出队列。排在后面的,后买到票,后出队列。
性质:
- 先进先出
- 只能从队尾插入数据
演示
我们使用切片简单的演示下队列
package main
type MyQueue interface {
Size()int //大小
Front()interface{} //第一个元素
End()interface{} //最后一个元素
IsEmpty() bool //是否为空
Enqueue(data interface{}) //入队
Dequeue() interface{} //出对
Clear()//清空
}
type Queue struct{
datastore []interface{}
theSize int
}
func(myqueue *Queue) Clear(){
myqueue.datastore =make([]interface{},0) //开辟内存
myqueue.theSize=0
}
func NewQueue() *Queue{
myqueue:=new(Queue)
myqueue.Clear()
return myqueue
}
func(myqueue *Queue) Size()int {
return myqueue.theSize //大小
}
func(myqueue *Queue) Front()interface{} {
if myqueue.Size()==0{ //判断是否为空
return nil
}
return myqueue.datastore[0]
}
func(myqueue *Queue) End()interface{} {
if myqueue.Size()==0{ //判断是否为空
return nil
}
return myqueue.datastore[myqueue.theSize-1]
}
func(myqueue *Queue) IsEmpty() bool{
return myqueue.theSize==0
}
func(myqueue *Queue) Enqueue(data interface{}) {
myqueue.datastore=append( myqueue.datastore,data) //入队
myqueue.theSize++
}
func(myqueue *Queue) Dequeue() interface{} {
if myqueue.Size()==0{ //判断是否为空
return nil
}
data:=myqueue.datastore[0]
if myqueue.Size()>1 {
myqueue.datastore = myqueue.datastore[1:myqueue.theSize] //截取
}
myqueue.theSize--
return data
}
func main(){
myq:=NewQueue()
myq.Enqueue(1)
myq.Enqueue(2)
myq.Enqueue(3)
myq.Enqueue(4)
fmt.Println(myq.Size())
fmt.Println(myq.Dequeue())
fmt.Println(myq.Dequeue())
fmt.Println(myq.Dequeue())
fmt.Println(myq.Dequeue())
fmt.Println(myq.Size())
myq.Enqueue(1)
myq.Enqueue(2)
myq.Enqueue(3)
myq.Enqueue(4)
myq.Clear()
fmt.Println(myq.Size())
}