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();
    }

}

 

posted @ 2021-04-06 10:39  william_zhao  阅读(108)  评论(0编辑  收藏  举报