package DataStruct
//使用队列实现排队(数组出现越界)
import scala.io.StdIn
object QueueDemo {
def main(args: Array[String]): Unit = {
val queue = new ArrayQueue(20)
var key = ""
while(true){
println("show:表示显示队列")
println("exit:表示退出队列")
println("add:请输入一个数")
println("get:取出一个数据")
key = StdIn.readLine()
key match{
case "show" => queue.showQueue()
case "add" => {
println("请输入一个数")
val value = StdIn.readInt()
queue.addQueue(value)
}
case "get" => {
val res = queue.getQueue()
if(isInstanceOf[Exception]){
println(res.asInstanceOf[Exception].getMessage)
}
else{
println(s"取出数据是$res")
}
}
case "exit" => System.exit(0) //不满足条件,退出(使用系统函数退出)
}
}
}
}
//使用数组模拟队列
class ArrayQueue(arrMaxSize:Int){
val maxSize = arrMaxSize
val arr = Array[Int](maxSize)
var front = -1 //头部,指向队列数据的前一个位置
var rear = -1 //尾部,..
//判断队列是否满
def isFull():Boolean={
rear == maxSize - 1
}
//判断队列对否为空
def isEmpty(): Boolean={
front == rear
}
//展示队列
def showQueue(): Unit ={
if(isEmpty()){
println("队列没有数据")
return
}
else
for(i <- front+1 to rear){
printf("arr[%d]=%d",i,arr(i))
}
println()
}
//添加数据
def addQueue(n:Int): Unit ={
//判断队列是否满,满就不能加数据
if(isFull()){
println("队列满,无法添加数据")
return
}
else {
rear += 1
arr(rear) = n
}
}
//取出数据
def getQueue():Any ={
if(isEmpty()){
return new Exception("队列空")
}
else
{
front += 1
return arr(front)
}
}
}
队列的添加功能:只能添加一个数据,添加第二个数据报错,求解