队列可以用数组或链表实现,遵从先入先出。

目录结构:

在main中调用queue包中的属性和方法,如何调用参考另一篇文章: https://www.cnblogs.com/xiximayou/p/12005480.html

一个队列需要有四要素:容量、队首指针、队尾指针、存储数据的数组

当队尾指针==容量-1时,此时队列已满,就不能再有数据进队;

当队首指针==队尾指针时,此时队列已空,就不能再从队列中取出数据;

同时可以发现,这种队列只能使用一次,因为那时队首和队尾都指向队尾了。

代码如下:

queue.go

package queue

import (
"errors"
"fmt"
) //Queue 使用结构体管理队列
type Queue struct {
MaxSize int
Array []int //模拟队列
Front int //队列首位
Rear int //队列尾部
} //AddQueue 向队列中添加一个值
func (q *Queue) AddQueue(val int) (err error) {
q.MaxSize =
//先判断队列是否已满
if q.Rear == q.MaxSize- {
return errors.New("队列已满")
}
q.Rear++
q.Array[q.Rear] = val
return
} //GetQueue 得到一个值
func (q *Queue) GetQueue() (val int, err error) {
if q.Front == q.Rear {
return -, errors.New("队列已空")
}
q.Front++
val = q.Array[q.Front]
return val, err
} //ShowQueue 显示队列
func (q *Queue) ShowQueue() {
for i := q.Front + ; i <= q.Rear; i++ {
fmt.Printf("queue[%d]=%v\t", i, q.Array[i])
}
}

main.go

package main

import (
"fmt"
"go_code/data_structure/queue"
"os"
) func main() {
var key string
var val int
q := &queue.Queue{
MaxSize: ,
Front: -,
Rear: -,
}
for {
fmt.Println("------------------------------")
fmt.Println("1.输入add表示添加数据到队列")
fmt.Println("2.输入get表示从队列中获取数据")
fmt.Println("3.输入show表示显示队列")
fmt.Println("4.输入exit表示退出")
fmt.Println("------------------------------")
fmt.Scanln(&key)
switch key {
case "add":
fmt.Println("请输入要添加的值:")
fmt.Scanln(&val)
err := q.AddQueue(val)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("添加成功")
fmt.Println("Rear:", q.Rear)
}
case "get":
val, err := q.GetQueue()
if err != nil {
fmt.Println(err)
} else {
fmt.Println("得到的值为:", val)
fmt.Println("Front:", q.Front)
} case "show":
q.ShowQueue()
fmt.Println()
case "exit":
os.Exit()
}
}
}

golang数据结构之队列的更多相关文章

  1. 数据结构之队列(Python 版)

    数据结构之队列(Python 版) 队列的特点:先进先出(FIFO) 使用链表技术实现 使用单链表技术,在表首尾两端分别加入指针,就很容易实现队列类. 使用顺序表list实现 # 队列类的实现 cla ...

  2. C语言数据结构-循环队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-循环队列的实现-C语言 #define MAXSIZE 100 //循环队列的存储结构 typedef struct { int* base; //基地址 int _front; //头 ...

  3. 数据结构之队列and栈总结分析

    一.前言: 数据结构中队列和栈也是常见的两个数据结构,队列和栈在实际使用场景上也是相辅相成的,下面简单总结一下,如有不对之处,多多指点交流,谢谢. 二.队列简介 队列顾名思义就是排队的意思,根据我们的 ...

  4. javascript数据结构之队列

    首先什么是队列? 排队买东西就是生活中队列的实际例子,在队伍中大家必须按照顺序来,不能插队,新来的人只能排在队伍的最后面.新加入的人相当于队列的后端加入的元素,队伍最前面买完东西的人离开队伍相当于是队 ...

  5. cb04a_c++_数据结构_STL_queue队列-一般用来做系统软件开发

    /*cb04a_c++_数据结构_STL_queue队列-一般用来做系统软件开发队列(只能两端数据)与堆栈(只能一端操作数据)都没有迭代器.,队列:FIFO先进先出自适应容器(容器适配器)栈适配器ST ...

  6. golang数据结构之环形队列

    目录结构: circlequeue.go package queue import ( "errors" "fmt" ) //CircleQueue 环型队列 ...

  7. golang数据结构和算法之QueueLinkedList链表队列

    队列和堆栈不一样的地方在于进出顺序: 堆栈是后进先出, 队列是先进先出. QueueLinkedList.go package QueueLinkedList type Node struct { d ...

  8. golang数据结构和算法之CircularBuffer环形缓冲队列

    慢慢练语法和思路, 想说的都在代码及注释里. CircularBuffer package CircularBuffer const arraySize = 10 type CircularBuffe ...

  9. golang数据结构之总结

    golang语言的一些数据结构实现,包括: 队列(单队列.循环队列) 链表(单链表.双链表.循环链表(解决约瑟夫环问题)) 栈(实现加减乘除计算) 递归之迷宫问题 哈希表(员工管理系统) 树(三种遍历 ...

随机推荐

  1. [考试反思]0916csp-s模拟测试44:可笑

    出现了有史以来第一个3首杀AK啊...然而跟我没有丝毫关系 (曾经还是有一次考试差点就有那么一点关系的...) 然而反正我考得很水就是了.不是很垃圾,而是很水. 这套题是真的水... T1不会证复杂度 ...

  2. P4544 [USACO10NOV]购买饲料Buying Feed

    额,直接思路就dp吧.(我还想了想最短路之类的233但事实证明不行2333.....) 直入主题: 化简题意:在x轴上有n个点,坐标为xi.从原点出发,目标点为e,在途中需要收集K重量的物品,在每个点 ...

  3. 从壹开始 [ Ids4实战 ] 之五 ║ 多项目集成统一认证中心的思考

    前言 哈喽大家好,好久都没有写文章了,这次又重新开始写技术文章了,半年前我还是一直保持每周都写文章的,后来是为了响应群友的号召,开始踏上了录制视频(https://www.bilibili.com/v ...

  4. 【Elasticsearch 7 探索之路】(二)文档的 CRUD 和批量操作

    上一篇,我们介绍了什么是 Elasticsearch,它能做什么用以及基本概念(索引 Index.文档 Document.类型 Type)理解.这篇主要对 文档的基本 CRUD 和 倒排索引进行讲解. ...

  5. map的线程安全问题

    为什么HashMap是线程不安全的 总说 HashMap 是线程不安全的,不安全的,不安全的,那么到底为什么它是线程不安全的呢?要回答这个问题就要先来简单了解一下 HashMap 源码中的使用的存储结 ...

  6. Ubuntu 16.04安装JDK并配置环境变量

    系统版本:Ubuntu 16.04 JDK版本:jdk1.8.0_121 1.官网下载JDK文件jdk-8u121-linux-x64.tar.gz 我这里下的是最新版,其他版本也可以 2.创建一个目 ...

  7. T-SQL Part XII: Access Remote SQL Server

    要链接远程的SQL Server,需要一下几个步骤(以下的步骤都是在远程系统上进行): 确认远程SQL Server所监听的端口号 官方的文档是使用SQL Server Configuration M ...

  8. 轻松实现C/C++各种常见进制相互转换

    其它进制转为十进制 在实现这个需求之前,先简单介绍一个c标准库中的一个函数: long strtol( const char *str, char **str_end, int base); 参数详细 ...

  9. 如何解决UNMOUNTABLE BOOT VALUME

    Windows error:UNMOUNTABLE BOOT VALUME 解决方法:Windows 修复工具 chkdsk命令 chkdsk D:/f ps:chkdsk 磁盘名 /f

  10. nyoj 37-回文字符串(reverse, 动态规划, lcs)

    37-回文字符串 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:10 submit:17 题目描述: 所谓回文字符串,就是一个字符串,从左到右读和从 ...