数据结构和算法_队列

队列是一个有序列表,可以用数组或者链表实现

先入先出的原则

 

 

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)    收藏  举报

导航