数据结构之队列(Queue)

一、介绍

队列:是一种特殊的线性表特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

二、逻辑

例:现有一个空队列
1.添加元素:q{ },我们向队列中加入(push)元素,push(1)
则 q{ 1 },继续加入元素push(2),push(3),现在队列中就有q {1, 2, 3}(加入的元素一定是在加入的上一个元素之后。

2.移除元素:使用pop()方法,将元素移除(注意:每次只能移除一个元素,并且是移除最早进入队列的元素),如:调用一次pop(),则q {2, 3},继续调用pop(),则去{ 3 }。

3.判断队列是否为空:使用IsImpty(),如果返回为turn,则为空队列,false则中为空。

三、代码实现(Go)

package queue

type Queue []int

//加入元素
//这里需要使用指针
func (q *Queue) Push(v int){
   *q = append(*q, v)
}

//移除元素
func (q *Queue) Pop() int {
   head := (*q)[0]
   *q = (*q)[1:]
   return head
}

//判断是否为空
func (q *Queue)IsImpty() bool{
   return len((*q)) == 0
}

下面写一个测试:

package main

import (
   "awesomeProject/tree/queue"
 "fmt")

func main() {
   q := queue.Queue{1}
   q.Push(2)
   q.Push(3)
   q.Pop()
   fmt.Println(q)
   fmt.Println(q.IsImpty())
   fmt.Println(q.Pop())
   fmt.Println(q.Pop())
   fmt.Println(q.IsImpty())

其输出如下:

[2 3]
false
2
3
true
本作品采用《CC 协议》,转载必须注明作者和本文链接
刻意学习
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
118
粉丝
89
喜欢
173
收藏
246
排名:365
访问:2.6 万
私信
所有博文
社区赞助商