java数据结构(一)--稀疏数组
1.数据结构包括:线性结构和非线性结构

2.稀疏数组和队列



二维数组和稀疏数组互转

稀疏数组的代码实现
/**
* 稀疏数组
*/
public class SparseArray {
public static void main(String[] args) throws IOException {
String path = "E:\\rray.txt";
//1.定义一个二维数组11*11 0--没有棋子 1-白棋 2-黑棋
int rray[][] = new int[11][11];
rray[1][2] = 1;
rray[2][3] = 2;
rray[6][8] = 2;
System.out.println("二维数组为:");
saveFile("二维数组为:", path);
for (int[] crow : rray) {
for (int roll : crow) {
System.out.printf("%d\t", roll);
}
System.out.println();
}
//数组存盘
saveFile(rray, path);
//2.二维数组转化为稀疏数组
//先得到棋子个数
int sum = 0;
for (int[] crow : rray) {
for (int roll : crow) {
if (roll != 0) {
sum++;
}
}
}
System.out.println("棋子个数:" + sum);
saveFile("棋子个数:" + sum, path);
//创建稀疏数组
int parseArr[][] = new int[sum + 1][3];
parseArr[0][0] = 11;
parseArr[0][1] = 11;
parseArr[0][2] = sum;
int count = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (rray[i][j] != 0) {
count++;
parseArr[count][0] = i;
parseArr[count][1] = j;
parseArr[count][2] = rray[i][j];
}
}
}
//打印稀疏数组
System.out.println("稀疏数组为:");
for (int[] crow : parseArr) {
for (int roll : crow) {
System.out.printf("%d\t", roll);
}
System.out.println();
}
System.out.println("稀疏数组长度:" + (parseArr.length));
saveFile("稀疏数组长度:" + (parseArr.length), path);
saveFile("稀疏数组为:", path);
//数组存盘
saveFile(parseArr, path);
//3.稀疏数组转二维数组
//创建二维数组
int newRray[][] = new int[parseArr[0][0]][parseArr[0][1]];
for (int i = 1; i < parseArr.length; i++) {
newRray[parseArr[i][0]][parseArr[i][1]] = parseArr[i][2];
}
System.out.println("还原后的二维数组:");
saveFile("还原后的二维数组:", path);
//数组存盘
saveFile(newRray, path);
for (int[] crow : newRray) {
for (int roll : crow) {
System.out.printf("%d\t", roll);
}
System.out.println();
}
//读取存储的文件
String s = readFile(path);
System.out.println(s);
}
/**
* 将数组存盘
*
* @param rray
* @param path
*/
private static void saveFile(int[][] rray, String path) throws IOException {
File file = new File(path);
BufferedWriter bf = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), "UTF-8"));
for (int[] crow : rray) {
for (int col : crow) {
bf.write(col + "\t");
}
bf.write("\n");
}
bf.flush();
bf.close();
}
/**
* 将文字存盘
*
* @param str
* @param path
*/
private static void saveFile(String str, String path) throws IOException {
File file = new File(path);
BufferedWriter bf = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file, true), "UTF-8"));
bf.write(str + "\n");
bf.flush();
bf.close();
}
/**
* 读取文件内容
*
* @param path
*/
private static String readFile(String path) throws IOException {
File file = new File(path);
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
StringBuilder sb = new StringBuilder();
while (br.readLine()!=null){
sb.append(br.readLine());
sb.append("\n");
}
return sb.toString();
}
}

浙公网安备 33010602011771号