数据结构和算法_队列
队列是一个有序列表,可以用数组或者链表实现
先入先出的原则


package chapter02 object test02 { def main(array: Array[String]):Unit={ val queue = new ArrayQeue(5) queue.addQueue(1) queue.addQueue(2) queue.addQueue(3) queue.addQueue(4) queue.addQueue(5) queue.addQueue(6) queue.showQueue() val res = queue.getQueue() if(res.isInstanceOf[Exception]){ println(res.asInstanceOf[Exception].getMessage) } printf("取到的元素为:%d ",res) val num_peek = queue.peek() if(res.isInstanceOf[Exception]){ println(res.asInstanceOf[Exception].getMessage) } printf("头元素:%d ",num_peek) } } //编写数据结构:创建--》添加--》遍历--》修改--》删除 class ArrayQeue(arrMaxSize :Int){ val maxSize=arrMaxSize//指定队列的大小 var arr=new Array[Int](maxSize) //队列中的数据存在数组中 var front = -1 var rear = -1 //判断队列满 def isFull():Boolean={ rear==maxSize-1 } //判断队列对空 def isEmpty():Boolean={ rear==front } //添加元素 def addQueue(num:Int):Unit={ if(isFull()){ println("队列已满,无法添加元素") return } //将rear后移 rear += 1 arr(rear)=num } //遍历显示队列 def showQueue():Unit={ println("front: "+front) println("rear: "+rear) if(isEmpty()){ println("队列为空,无法显示") } for(i <- front+1 to rear){ println(arr(i)) } } //取数据:可能取到数据,可能取不到 def getQueue():Any={ if(isEmpty()){ return new Exception("队列为空,无法取数据") } front += 1 return arr(front) } //查看头元素 def peek():Any={ if(isEmpty()){ return new Exception("队列为空") } return arr(front+1) } }
package chapter02 object test03 { def main(array: Array[String]):Unit={ val queue = new ArrayQeue2(6) queue.addQueue(1) queue.addQueue(2) queue.addQueue(3) queue.addQueue(4) queue.addQueue(5) queue.addQueue(6) queue.showQueue() val res = queue.getQueue() if(res.isInstanceOf[Exception]){ println(res.asInstanceOf[Exception].getMessage) } printf("取到的元素为:%d ",res) val num_peek = queue.peek() if(res.isInstanceOf[Exception]){ println(res.asInstanceOf[Exception].getMessage) } printf("头元素:%d ",num_peek) } } //编写数据结构:创建--》添加--》遍历--》修改--》删除 class ArrayQeue2(arrMaxSize :Int){ val maxSize=arrMaxSize//指定队列的大小 var arr=new Array[Int](maxSize) //队列中的数据存在数组中 var front = 0 var rear = 0 //判断队列满 def isFull():Boolean={ (rear+1)%maxSize==front } //判断队列对空 def isEmpty():Boolean={ rear==front } //添加元素 def addQueue(num:Int):Unit={ if(isFull()){ printf("队列已满,无法添加元素 %d \n",num) return } //先把数据放进去,将rear后移 arr(rear)=num rear = (rear+1)%maxSize } //遍历显示队列==>统计打印多少个元素 def showQueue():Unit={ println("front: "+front) println("rear: "+rear) if(isEmpty()){ println("队列为空,无法显示") } for(i <- front until front+size()){ println(arr(i%maxSize)) } } //统计元素个数 def size():Int={ return (rear-front+maxSize)%maxSize } //取数据:可能取到数据,可能取不到 def getQueue():Any={ if(isEmpty()){ return new Exception("队列为空,无法取数据") } val temp = arr(front) front =(front+1)%maxSize return temp } //查看头元素 def peek():Any={ if(isEmpty()){ return new Exception("队列为空") } return arr(front) } }
posted on 2020-08-22 19:37 happygril3 阅读(135) 评论(0) 收藏 举报
浙公网安备 33010602011771号