数据结构和算法_稀疏数组
数据结构:
(1)线性结构:一维数组,队列,链表,栈
(2)非线性结构:二维数组,多维数组,广义表,树,森林,图
使用稀疏数组对原始数据压缩
0 0 0 0 0
0 1 0 0 0
2 0 0 0 0
稀疏数组:
row col value
总行数=3 总列数=5 有效值个数=2
1 1 1
2 0 2
package chapter02 import scala.collection.mutable.ArrayBuffer object test01 { def main(args:Array[String]):Unit={ //定义二维数组 val rows = 3 val cols = 5 val chessMap1: Array[Array[Int]] = Array.ofDim[Int](rows,cols) chessMap1(1)(1) = 1 chessMap1(2)(0) = 2 //遍历二维数组 for ( i <- 0 until chessMap1.length){ for ( j <- 0 until chessMap1(i).length){ printf("%d ",chessMap1(i)(j)) } println() } //对二维数组压缩 //创建ArrayBuffer,动态的压缩数据 //用node对象表示一个数据 val sparseArray = ArrayBuffer[Node]() sparseArray.append(new Node(rows,cols,0)) //遍历chessMap1,如果发现一个非零的对象,则加入sparseArray for ( i <- 0 until chessMap1.length){ for ( j <- 0 until chessMap1(i).length){ val result = chessMap1(i)(j) if (result != 0){ sparseArray.append(new Node(i,j,result)) } } } println("稀疏数组是: ") for(i<- 0 until sparseArray.length){ val node = sparseArray(i) printf("%d %d %d \n",node.row,node.col,node.value) } //将稀疏数组恢复成二维数据 val col_2 = sparseArray(0).col val row_2 = sparseArray(0).row val chessMap2 = Array.ofDim[Int](row_2,col_2) for (i <- 1 until sparseArray.length){ val col_res = sparseArray(i).col val row_res = sparseArray(i).row val value_res = sparseArray(i).value chessMap2(row_res)(col_res)=value_res } println("恢复后的二维数组:") for (i <- 0 until chessMap2.length){ for (j <- 0 until chessMap2(i).length){ printf("%d ",chessMap2(i)(j)) } println() } } } class Node(val row:Int,val col:Int,val value:Int){ }
posted on 2020-08-22 18:34 happygril3 阅读(139) 评论(0) 收藏 举报
浙公网安备 33010602011771号