golang实现队列操作
队列和栈一样也是表。然而队列是插入在一段进行而删除在另一端进行。
队列是先进先出(FIFO)的。
下面用切片实现队列操作:
package main
import "fmt"
type Element interface{}
type Queue interface {
Offer(e Element) //向队列中添加元素
Poll() Element //移除队列中最前面的元素
Clear() bool //清空队列
Size() int //获取队列的元素个数
IsEmpty() bool //判断队列是否是空
}
type sliceEntry struct{
element []Element
}
func NewQueue() *sliceEntry {
return &sliceEntry{}
}
//向队列中添加元素
func (entry *sliceEntry) Offer(e Element) {
entry.element = append(entry.element,e)
}
//移除队列中最前面的额元素
func (entry *sliceEntry) Poll() Element {
if entry.IsEmpty() {
fmt.Println("queue is empty!")
return nil
}
firstElement := entry.element[0]
entry.element = entry.element[1:]
return firstElement
}
func (entry *sliceEntry) Clear() bool {
if entry.IsEmpty() {
fmt.Println("queue is empty!")
return false
}
for i:=0 ; i< entry.Size() ; i++ {
entry.element[i] = nil
}
entry.element = nil
return true
}
func (entry *sliceEntry) Size() int {
return len(entry.element)
}
func (entry *sliceEntry) IsEmpty() bool {
if len(entry.element) == 0 {
return true
}
return false
}
func main() {
queue := NewQueue()
for i := 0; i < 50; i++ {
queue.Offer(i)
}
fmt.Println("size:",queue.Size())
fmt.Println("移除最前面的元素:",queue.Poll())
fmt.Println("size:",queue.Size())
fmt.Println("清空:",queue.Clear())
for i := 0; i < 50; i++ {
queue.Offer(i)
}
fmt.Println(queue.Poll())
fmt.Println(queue.Poll())
fmt.Println(queue.Size())
}
还没有评论,来说两句吧...