稀疏数组
稀疏数组作用就是压缩文件
package main
import(
"fmt"
)
type ValNode struct{
row int
col int
val int
}
func main(){
var chess[11][11] int
chess[1][2]=1
chess[2][3]=2
for _,v :=range chess{
for _,v2 :=range v{
fmt.Printf("%d\t",v2)
}
fmt.Println()
}
var sparseArr []ValNode
//标准稀疏数组,初始第一行
valNode:=ValNode{
row:11,
col:11,
val:0,
}
sparseArr = append(sparseArr, valNode)//初始节点也要先把它加进去
for i,v :=range chess{
for j,v2 :=range v{
if v2!=0{
valNode=ValNode{
row:i,
col:j,
val:v2,
}
sparseArr=append(sparseArr,valNode)
}
}
}
fmt.Println("稀疏数组")
for i,v:=range sparseArr{
fmt.Printf("%d: %d %d %d\n",i,v.row,v.col,v.val)
}
var chess2 [11][11] int
for i,v:=range sparseArr{
if i!=0{
chess2[v.row][v.col]=v.val
}
}
fmt.Println("恢复的原始数据")
for _,v :=range chess2{
for _,v2 :=range v{
fmt.Printf("%d\t",v2)
}
fmt.Println()
}
}
package datastruct;
public class SparseArray {
public static void main(String[] args) {
int chess[][]=new int[11][11];
chess[1][2]=1;
chess[2][3]=2;
chess[4][5]=2;
System.out.println("原来二维数组");
for(int[] i:chess){
for(int j:i){
System.out.printf("%d\t",j);
}
System.out.println();
}
int sum=0;
for(int i=0;i<11;i++){
for (int j=0;j<11;j++){
if(chess[i][j]!=0){
sum++;
}
}
}
int sparseArr[][] =new int[sum+1][3];
sparseArr[0][0]=11;
sparseArr[0][1]=11;
sparseArr[0][2]=sum;
int count=1;
for(int i=0;i<11;i++){
for (int j=0;j<11;j++){
if(chess[i][j]!=0){
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chess[i][j];
count++;
}
}
}
System.out.println("稀疏数组");
for(int i=0;i<sparseArr.length;i++){
System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}
System.out.println();
int chess2[][]=new int[sparseArr[0][0]][sparseArr[0][1]];
for(int i=1;i<sparseArr.length;i++){
chess2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
}
System.out.println("恢复后的数组");
for(int[] i:chess2){
for(int j:i){
System.out.printf("%d\t",j);
}
System.out.println();
}
}
}