Golang——切片实现队列

队列是一种先进先出的线性表,简称FIFO。在go语言中通过定义结构体实现队列

定义结构体,data表示存储队列中的内容;size为队列的长度。定义NewSliceQueue方法,返回结构体。后期在主函数中通过调用该方法进行操作队列。

type SliceQueue struct {
	data []interface{}
	size int           
}

func NewSliceQueue() *SliceQueue {
	return &SliceQueue{}
}

 给结构体绑定IsEmpty方法用于判断队列是否为空,绑定IsSize方法用于输出队列的长度

func (this *SliceQueue) IsEmpty() bool {
	return this.size == 0
}

func (this *SliceQueue) IsSize() int {
	return this.size
}

IsPot方法返回队列中第一个元素,因为队列是先进先出的因此直接返回队列的第一个元素就可以。

func (this *SliceQueue) IsPot() interface{} {
	if this.IsEmpty() {
		return nil
	}
	return this.data[0]
}

两种入队列的操作,第一种为一个一个添加,通过append内置函数进行操作;第二种为一次性添加多个元素,通过for ...range...循环操作。

func (this *SliceQueue) Push(v interface{}) {
	this.data = append(this.data, v)
	this.size++
}


func (this *SliceQueue) Pushs(v ...interface{}) {
	for _, v := range v {
		this.Push(v)
	}
}

出队列操作,每次弹出队列的第一个元素

func (this *SliceQueue) Pop() interface{} {
	if this.IsEmpty() {
		fmt.Println("空队列")
		return nil
	}
	v := this.data[0]
	this.data = this.data[1:]
	this.size--
	return v
}

Peek方法通过for...range...循环显示队列种的元素

func (this *SliceQueue) Peek() {
	if this.IsEmpty() {
		fmt.Println("空栈")
		return
	}
	fmt.Println("当前队列中的元素:")
	for k, v := range this.data {
		fmt.Printf("k:%d,v:%v\n", k, v)
	}
}

主函数

func main() {
	slicequeue := NewSliceQueue()
	if slicequeue.IsEmpty() {
		fmt.Println("空队列")
	} else {
		fmt.Println("当前队列长度为:", slicequeue.IsSize())
	}
	fmt.Println("入队列:")
	slicequeue.Push("1")
	slicequeue.Push("2")
	slicequeue.Push("3")
	slicequeue.Pushs(4, "golang", 123)
	fmt.Println("当前队列长度为:", slicequeue.IsSize())
	slicequeue.Peek()
	fmt.Println("当前队首元素为:", slicequeue.IsPot())
	fmt.Println("出队列元素:", slicequeue.Pop())
	fmt.Println("当前队首元素为:", slicequeue.IsPot())
}

程序整体运行结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值