用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("******退出成功******")
}
}
}