首页天道酬勤二维数组转稀疏数组,C语言一维数组变为二维数组

二维数组转稀疏数组,C语言一维数组变为二维数组

张世龙 05-12 11:06 11次浏览

场景

棋盘游戏往往需要保存和领先。 如果棋盘上的棋子很多,最好使用二维数组来记住棋盘上棋子的位置和数量。但是,如果棋子少,用二维数组来存储会浪费空间。 在这种情况下,可以用稀疏数组保存。

稀疏数组稀疏数组是定义数据存储结构的二维数组,主要用于记录上面大部分元素为0或相同值(以下统称为不为0)的二维数组。 每个稀疏数组只有三列,这取决于有多少列不是0。 在其第1行记录二维排列的行数、列数、不为0的个数,从第2列开始分别记录不为0的位置(行和值)。 例如,与上面的二维数组相对应的稀疏数组如下所示:

比较可知,需要存储11X11=121的数据,但现在只需要3X3=9。

示例:

js代码如下。

/** *维数组* @arr:维数组*/functionprint2ary(arr ) for(item1ofarr ) ) letrow=' ' for (item2of item1) ) row=iitem1 功能产品2 ary ) row,col ) ) letarr=newarray ) row ).fill(0) )0); for(indexinarr ) arr[index]=newarray ) col ).fill(0; }返回阵列}//打印机(产品); /** *将维数组转换为稀疏数组* @arr:维数组*/functionary2sparse(arr ) { let row=arr.length; let col=arr[0].length; let sum=0; //用于存储棋子位置和值的letnewarr=[]arr.foreach((item1,index1) ) item2,index2)=(if ) ) item2!==0) {newARR.push([index1,index2,item2]; sum; () );//将二维阵列的记录状况设定为第1列的newarr.unshift([row,col,sum] ); return newArr}/** *稀疏数组二维数组* @arr :稀疏数组*/functionsparse2ary(arr ) ) letrow=arr(0); let col=arr[0][1]; let sum=arr[0][2]; let new arr=产品2 ary (row,col ); for(varI=1; i=sum; I ) { new arr [ I ] [0] (arr [ I ] [1]=arr [ I ] [2]; } return newArr}//维数组letarr=product2ary (6,7 ); arr[0][3]=22; arr[0][6]=15; arr[1][1]=11; arr[1][5]=17; arr[2][3]=-6; arr[3][5]=39; arr[4][0]=91; arr[5][2]=28; //稀疏排列二维阵列letsparse=ary2sparse(arr ) ) /稀疏排列print2ary (sparse ) console.log(-----------------中间分离线)//在打印二维数组print2Ary(Array )的最后书写。 如果有错误,请指出来

数据稀疏,字符串数组压缩