线性结构和非线性结构
线性结构
1)线性结构是最常用的数据结构,主要特点为数据元素之间存在一对一的线性关系
2)线性结构有两种不同的存储结构,顺序存储结构 和 链式存储结构。顺序存储结构的线性表被叫做顺序表,顺序表中的存储结构是连续的
3)链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
4)线性结构常见的有:数组,队列,链表和栈。
非线性结构
非线性结构包括:二维数组,多维数组,广义表,树结构,图结构
稀缺数组和队列
稀缺sparsearray数组
实际需求:
编写五子棋程序,有存盘,和续上盘的功能实现。
存盘就需要把上一把的棋盘行列用二维数组的方式保存下来。默认值为0 黑白棋则可以分别用不同的数字代替
原始数组:[6][7]
稀缺数组:如上棋盘中可能会存在很多共同的大量数据 0 ,稀缺数组的作用即 尽可能的优化二维数组,将这些共同的0抹去。
稀缺处理方式:
1) 记录数组一共有几行几列,有多少个不同的值。
2) 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
下标为0的数组(第 一行)的6为二维数组的行数,7位二维数组的列数,8为二维数组中有多少个不同的值
下标为1到8的数组记录的值为 拿下标1的数组举例,0为二维数组中的第一行,3位第三列,22位值
实现方式
//五子棋盘二维数组 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(); }