Go数据结构与算法-实现数组队列

版权声明:本文为博主原创文章,未经博主允许不得转载。 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())
	
}


猜你喜欢

转载自blog.csdn.net/yang731227/article/details/84990201