稀疏数组sparseArray

稀疏数组sparseArray

 

应用实例
1) 使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等)
2) 把稀疏数组存盘,并且可以从新恢复原来的二维数组数
3) 整体思路分析
4) 代码实现
import scala.collection.mutable.ArrayBuffer
//稀疏数组--压缩 恢复
object SparseArr {
  def main(args: Array[String]): Unit = {
    val rowSize = 11    // 棋盘的行
    val colSize = 11    // 棋盘的列
    //演示一个稀疏数组的使用
    val chessMap = Array.ofDim[Int](rowSize, colSize)
    //初始化
    chessMap(1)(2) = 1 // 1  代表黑子
    chessMap(2)(3) = 2 // 2  代表白子

    //输出原始的棋盘
    println("------输出棋盘原始数组-------")
    for (item <- chessMap) {
      for (item2 <- item) {
        printf("%d\t", item2)
      }
      println()
    }

    //将chessMap转成稀疏数组
    // 思路 => 效果是达到对数据的压缩
    // class Node (row ,col ,value)
    // ArrayBuffer
    val sparseArr = ArrayBuffer[Node]()
    val node = new Node(rowSize,colSize,0)
    sparseArr.append(node)
    for ( i <-  0 until(chessMap.length)){
      for ( j <- 0 until(chessMap(i).length) ){
        //判断该值是否为0,如果不为0就保存
        if(chessMap(i)(j) !=0 ){
          //构建一个Node
          val node = new Node(i,j,chessMap(i)(j))
          //加入到稀疏数组
          sparseArr.append(node)
        }
      }
    }

    println("------输出棋盘稀疏数组-------")
    for ( node <- sparseArr){
      printf("%d\t%d\t%d\n",node.row,node.col,node.value)
    }

    //存盘
    //读盘 ->
    //稀疏数组 -> 原始数组

    //读取稀疏数组的第一个节点
    val newNode = sparseArr(0)
    val rowSize2 = newNode.row
    val colSize2 = newNode.col

    val chessMap2 = Array.ofDim[Int](rowSize2,colSize2)

    for (i <- 1 until sparseArr.length){
      val node = sparseArr(i)
      chessMap2(node.row)(node.col) = node.value
    }

    println("----从稀疏数组恢复后的数组----")
    for (item <- chessMap2){
      for (item2 <- item){
        printf("%d\t",item2)
      }
      println()
    }
  }
}

class Node(val row: Int, val col: Int, val value: Int)

 

  

 

posted @ 2019-08-05 22:02  DiYong  阅读(595)  评论(0编辑  收藏  举报