最近学习韩老师的数据结构,算是交下作业
/**
- 1.二维数组与稀疏数组的转换
- 2.稀疏数组的读写操作
- @author wuwuby
- @create 2020-02-03 下午3:20
*/
public class SparseTest {
public static void main(String[] args) {
//创建一个原始的二维数组 11 * 11
//0:表示没有棋子,1表示黑子,2表示篮子
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
//输出原始的二维数组
for(int[] row : chessArr1){
for(int data : row){
System.out.print(data + " ");
}
System.out.println();
}
//将二位数组转稀疏数组
int sum = 0;
//1.先遍历二位数组得到非0数组的个数
for(int i = 0; i < 11; i++){
for(int j = 0; j < 11; j++){
if( chessArr1[i][j] != 0){
sum++;
}
}
}
//2.创建对应的稀疏数组
int sparseArray[][] = new int[sum + 1][3];
//给稀疏数组赋值
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = sum;
//遍历二维数组,将非0的值放到SparseArr中
int count = 0; //用于记录是第几个非0数据
for(int i = 0; i < 11; i++){
for(int j = 0; j < 11; j++){
if( chessArr1[i][j] != 0){
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = chessArr1[i][j];
}
}
}
System.out.println();
System.out.println("得到的稀疏数组为:");
for(int i = 0; i < sparseArray.length; i++){
System.out.printf("%d\t%d\t%d\t\n",sparseArray[i][0], sparseArray[i][1], sparseArray[i][2]);
}
System.out.println("*************************");
//将稀疏数组恢复成二维数组
int m = sparseArray[0][0];
int n = sparseArray[0][1];
int DoubleArray[][] = new int[m][n];
for(int i = 0; i < sum; i ++){
int a = sparseArray[i+1][0];
int b = sparseArray[i+1][1];
DoubleArray[a][b] = sparseArray[i+1][2];
}
for(int i = 0; i < 11; i++){
for(int j = 0; j < 11; j++){
System.out.print(DoubleArray[i][j] + " ");
}
System.out.println();
}
System.out.println("********************************");
//调用读写方法
writeSp(sparseArray, sum);
readSp(sum);
}
//写入操作
static void writeSp(int[][] sparseArray, int sum){
int[] temp;
FileOutputStream fos = null;
try {
//1.创建File对象与流对象
File spOut = new File("map.data");
fos = new FileOutputStream(spOut);
//2.具体的写入操作
for(int i = 0; i < sparseArray.length; i++){
temp = sparseArray[i];
for (int j = 0; j < temp.length; j++) {
fos.write(temp[j]);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//3.关闭资源
if(fos != null){
try {
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//读取操作
static void readSp(int sum){
FileInputStream fis = null;
try {
fis = new FileInputStream("map.data");
int[][] buffer = new int[sum + 1][3];
int len;
for (int i = 0; i < sum+1; i++) {
for(int j = 0; j < 3 && ((len = fis.read())!= -1); j++){
buffer[i][j] = len;
}
}
System.out.println();
System.out.println("读取稀疏数组为:");
for(int i = 0; i < buffer.length; i++){
System.out.printf("%d\t%d\t%d\t\n",buffer[i][0], buffer[i][1], buffer[i][2]);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}