标签:复用 不能 cas 打印 ring class highlight mat maxsize
这里选择用数组实现,为了队列可以复用,选择环形数组实现
import scala.io.StdIn
object CircleArrayQueue {
def main(args: Array[String]): Unit = {
val queue = new ArrayQueue2(3)
//菜单演示
var key = ""
while (true){
println()
println("请选择菜单")
println("show:显示队列")
println("add:添加数据")
println("get:获取数据")
println("peek:获取队列头元素")
println("exit:退出程序")
key = StdIn.readLine()
key match {
case "show" => queue.show()
case "add" =>
println("请输入一个数")
val num=StdIn.readInt()
queue.addQueue(num)
case "get" =>
//查看头元素判断
val res: Any = queue.getQueue()
if (res.isInstanceOf[Exception]){
println(res.asInstanceOf[Exception].getMessage)
}else{
println("队列取出的值为:"+res)
}
case "peek" =>
val res: Any = queue.peek()
if (res.isInstanceOf[Exception]){
println(res.asInstanceOf[Exception].getMessage)
}else{
println("当前队列头元素为:"+res)
}
}
}
}
}
class ArrayQueue2(arrMaxSize:Int){
val maxSize =arrMaxSize //指定队列大小
val arr = new Array[Int](maxSize) //队列中数据,存放在数组中
var front = 0 //初始化为0,表示队列的头,指向队列的第一个元素
var rear = 0 //初始化0,指向队列最后一个元素的后一个位置
//判断是否满了
def isFull():Boolean ={
(rear+1) % maxSize == front
}
//判断队列是否空
def isEmpty():Boolean={
rear == front
}
//添加数据
def addQueue(num : Int): Unit={
if (isFull()){
println("队列满了,不能加入了")
return
}
arr(rear) =num
//将rear 后移
rear =(rear+1) % maxSize
}
//遍历显示队列
//1.从front开始打印,打印多少个元素
//2.需要统计出该队列有多少个有效元素
def show(): Unit ={
if (isEmpty()){
println("队列空~")
return
}
for (i <- front until front+size()){
printf("arr(%d)=%d \t",(i % maxSize),arr(i % maxSize))
}
}
def size():Int={
return (rear + maxSize -front) % maxSize
}
//取数据,可能取到数据也可能取不到数据(异常)
def getQueue():Any={
if(isEmpty()){
return new Exception("队列空,没有数据")
}
//因为front指向队列的第一个元素
val res = arr(front)
front = (front+1) % maxSize
return res
}
//查看队列的头元素但是不取出
def peek():Any={
if (isEmpty()){
return new Exception("队列空,无数据")
}
return arr(front)
}
}
标签:复用 不能 cas 打印 ring class highlight mat maxsize
原文地址:https://www.cnblogs.com/help-silence/p/12904441.html