博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang数据结构之队列
阅读量:3937 次
发布时间:2019-05-23

本文共 2155 字,大约阅读时间需要 7 分钟。

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

目录结构:

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

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

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

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

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

代码如下:

queue.go

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

main.go

package mainimport (    "fmt"    "go_code/data_structure/queue"    "os")func main() {    var key string    var val int    q := &queue.Queue{        MaxSize: 4,        Front:   -1,        Rear:    -1,    }    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("Rear:", q.Front)            }        case "show":            q.ShowQueue()            fmt.Println()        case "exit":            os.Exit(0)        }    }}

 

你可能感兴趣的文章
debug 打印 开关 设计(for c || C++)
查看>>
vmware中虚拟机和主机ping不通的问题。
查看>>
从“冷却时间”谈产品设计
查看>>
常用shell脚本
查看>>
长网站 转换为 短网址 的原理
查看>>
基于http协议的C语言客户端代码
查看>>
我常用的makefile之产生优秀的.depend文件
查看>>
VMware无法识别USB设备的解决方法 以及 从虚拟机中断开USB设备,使其重新连接到windows主机上
查看>>
linux下C代码、C++代码和命令行方式,完成字符集编码的转换
查看>>
写代码就像写作文
查看>>
常用shell特殊符号变量一览
查看>>
如何做事
查看>>
架构实践 - 1. 架构风格
查看>>
架构实践 - 3. 基于事件系统的demo
查看>>
架构实践 - 4. 架构设计之进程通信(独立构件风格)
查看>>
架构实践 - 5. 基于进程通信的demo
查看>>
sys/time.h 和 time.h的区别
查看>>
1、蓝牙概述
查看>>
2 系统架构师 - 知识框架
查看>>
Linux下 socket-tcp通信
查看>>