golang使用数组模拟环形队列,用go语言打印弥勒佛

用go语言打印弥勒佛。

GO使用数组模拟环形队列
队列算法:先进先出,以下纯代码:
新建一个:queue.go 代码如下:

package utils

import (
	"fmt"
	"errors"
)

//数组模拟环环形队列;注意:arr中有一位是占位的,不做使用
type Queue struct{
	MaxSize int //如果maxSize=5,则环形数组最多存放四个正常的值
	arr [5]int //环形数组:注意最多存放四个值
	Head int //环形队列对首
	Tail int //队尾
}

//入队列
func (this *Queue) Push(val int)(err error){
	if this.isFull(){
		return errors.New("环形队列已满,不能继续输入")
	}

	this.arr[this.Tail] = val
	this.Tail = (this.Tail + 1) % this.MaxSize
	return
}

//出队列
func (this *Queue) Pop()(val int, err error){
	if this.isEmpty(){
		return 0, errors.New("环形队列为空")
	}

	val = this.arr[this.Head]
	this.Head = (this.Head + 1) % this.MaxSize
	return
}

//获取列表的所有值
func (this *Queue) Lists(){
	size := this.length()
	if size == 0{
		fmt.Println("队列为空")
		return
	}

	tempHead := this.Head
	for i := 0; i < size; i++{
		fmt.Printf("arr[%d]=%d \t", tempHead, this.arr[tempHead])
		tempHead = (tempHead + 1) % this.MaxSize
	}
}

//判断队列是否已满
func (this *Queue) isFull() bool{
	return (this.Tail + 1) % this.MaxSize == this.Head
}

//判断队列是否为空
func (this *Queue) isEmpty() bool{
	return this.Head == this.Tail
}

//查看队列长度
func (this *Queue) length() int{
	return (this.Tail + this.MaxSize - this.Head) % this.MaxSize 
}

新建 main.go 代码如下:

package main

import (
    "fmt"
    "goCode/project/utils" //存放queue.go的目录
    "os"
)

func init(){
    fmt.Println("***************************开始施法**************************")
    fmt.Println("*                                                           *")
    fmt.Println("*                          _ooOoo_                          *")
    fmt.Println("*                         o8888888o                         *")
    fmt.Println("*                         88\" . \"88                         *")
    fmt.Println("*                         (| ^_^ |)                         *")
    fmt.Println("*                         O\\  =  /O                         *")
    fmt.Println("*                      ____/'---'\\____                      *")
    fmt.Println("*                    .'  \\\\|     |//  `.                    *")
    fmt.Println("*                   /  \\\\|||  :  |||//  \\                   *")
    fmt.Println("*                  /  _||||| -:- |||||-  \\                  *")
    fmt.Println("*                  |   | \\\\\\  -  /// |    |                 *")
    fmt.Println("*                  | \\_|  ''\\---/''  |    |                 *")
    fmt.Println("*                  \\  .-\\__  `-`  ___/-.  /                 *")
    fmt.Println("*                ___`. .'  /--.--\\  `. . ___                *")
    fmt.Println(`*              ."" '<  '.___\\_<|>_/___.'  >'"".            *`)
    fmt.Println("*            | | :  `- \\`.;`\\ _ /`;.`/ - ` : | |            *")
    fmt.Println("*            \\  \\ `-.   \\_ __\\ /__ _/   .-` /  /            *")
    fmt.Println("*     ========`-.____`-.___\\_____/___.-`____.-'========     *")
    fmt.Println("*                          `=---='                          *")
    fmt.Println("*     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^     *")
    fmt.Println("*           佛祖保佑       永不宕机     永无BUG             *")
    fmt.Println("*************************************************************")
}

func main() {

    queue := &utils.Queue{
        MaxSize : 5,
        Head : 0,
        Tail : 0, 
    }

    var key int
    var num int

    for{
        fmt.Println("\n\n--------------------------环形队列测试-------------------------")
        fmt.Println("                          1.入 列")
        fmt.Println("                          2.出 列")
        fmt.Println("                          3.列 表")
        fmt.Println("                          4.退 出")
        fmt.Println("")

        fmt.Print("请输入序号(1-4)执行操作:")
        fmt.Scanln(&key)

        switch key {
            case 1 : 
                fmt.Println("******队列入列******")
                fmt.Println("******请输入入队列的值:******")
                fmt.Scanln(&num)
                err := queue.Push(num)
                if err != nil{
                    fmt.Println("err =", err)
                }else{
                   fmt.Println("******入列成功******") 
                }
            case 2 :
                fmt.Println("******队列出列******")
                val, err := queue.Pop()
                if err != nil{
                    fmt.Println("err =", err)
                }else{
                    fmt.Println("******出列成功******val=", val)
                }
            case 3 :
                fmt.Println("******队列当前情况:******")
                queue.Lists()
                fmt.Println()
            case 4 :
                os.Exit(0)
                fmt.Println("******退出成功******")
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员D日常

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值