线性结构和非线性结构

线性结构

1)线性结构是最常用的数据结构,主要特点为数据元素之间存在一对一的线性关系

2)线性结构有两种不同的存储结构,顺序存储结构 链式存储结构。顺序存储结构的线性表被叫做顺序表,顺序表中的存储结构是连续的

3)链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息

4)线性结构常见的有:数组,队列,链表和栈。

非线性结构

非线性结构包括:二维数组,多维数组,广义表,树结构,图结构

                                稀缺数组和队列

稀缺sparsearray数组

实际需求:

编写五子棋程序,有存盘,和续上盘的功能实现。

存盘就需要把上一把的棋盘行列用二维数组的方式保存下来。默认值为0   黑白棋则可以分别用不同的数字代替 

原始数组:[6][7]

线性结构和非线性结构_第1张图片

稀缺数组:如上棋盘中可能会存在很多共同的大量数据 0 ,稀缺数组的作用即 尽可能的优化二维数组,将这些共同的0抹去。

稀缺处理方式:

1) 记录数组一共有几行几列,有多少个不同的值。

2) 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

下标为0的数组(第 一行)的6为二维数组的行数,7位二维数组的列数,8为二维数组中有多少个不同的值

下标为1到8的数组记录的值为  拿下标1的数组举例,0为二维数组中的第一行,3位第三列,22位值

线性结构和非线性结构_第2张图片

 实现方式

线性结构和非线性结构_第3张图片

//五子棋盘二维数组
        int [][] rareArray = new int[11][11];
        //白子所在棋盘位置
        rareArray[1][2] = 1;
        //黑子所在棋盘位置
        rareArray[2][3] = 2;
        int count = 1;
        for (int i = 0; i < rareArray.length; i++) {
            for (int h = 0; h < rareArray.length; h++) {
                if(rareArray[i][h]!=0){
                    //说明有一个值
                    count++;
                }
            }
        }
        int num = 1;
        Integer [][] xiQueArray = new Integer[count][3];
        int rowLength=rareArray.length;
        int columns =rareArray[0].length;
        xiQueArray[0][0]=rowLength;
        xiQueArray[0][1]=columns;
        xiQueArray[0][2]=count;
        for (int i = 0; i < rareArray.length; i++) {
            for (int j = 1; j < rareArray[i].length; j++) {
                if(rareArray[i][j]!=0){
                    xiQueArray[num][0] = i;
                    xiQueArray[num][1] = j;
                    xiQueArray[num][2] = rareArray[i][j];
                    num++;
                }
            }
        }
        for (int i = 0; i < xiQueArray.length; i++) {
            for (int j = 0; j < xiQueArray[i].length; j++) {
                System.out.print("  "+xiQueArray[i][j]);
            }
            System.out.println();
        }

你可能感兴趣的:(java,大数据,数据结构)