1、字符匹配问题
kmp算法 部分匹配表
线性结构 非线性结构
约瑟夫问题
丢手帕问题 对程序进行优化
修路问题 最小生成树 普里姆算法
最短路径 弗洛伊德算法
汉诺塔 分支算法
八皇后问题 回溯算法
2.2 实际编程中遇到的问题
2.2.1 问题一-字符串替换问题需要使用单链表数据结构问题
2.2.2 问题二-五子棋问题
2.2.3约瑟夫问题(丢手帕问题) 需要单向环形链表
2.3 线性结构 和非线性结构
数据结构 包括线性结构和非线性 结构
2.3.1线性结构
1、线性结构一一对应
2、顺序结构 和链式存储
3、存储元素不一定你个是连续的
常见: 数组队列 链表栈
第三章稀疏数组和队列
3.1稀疏sparsearray数组
稀疏数组的处理方法
1)首先记录数组一共有几行几列
2)把具有不同值的元素的行列及值记录在一个小规模的数组中从而缩小程序的规模
棋盘问题 就是可以作为一个稀疏数组
二维数组 转稀疏数组 的思路
1、遍历原始的二维数组 得到有效数据的个数sum
2、根据sum 就可以创建稀疏数组sparseArr int[sum+1][3]
3、将二位数组的有效数据 存入到稀疏数组
稀疏数组 转原始的二位数组的思路
1、先读取 稀疏数组的第一行根据第一行的数据 创建原始的二维数组
2、在读取稀疏数组后几行数据 并赋予原始的二维数组即可
public class SparseArray {
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;
// 输出原始的二维数组
System.out.println("原始的数据结构");
for (int[] row:chessArr1){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
int sum = 0;
for (int i = 0; i < 11 ; i++) {
for (int j = 0; j <11 ; j++) {
if (chessArr1[i][j]!=0){
sum++;
}
}
}
System.out.println("sum:"+sum);
//2、创建对应的稀疏数组
int spareArr[][] = new int[sum+1][3];
spareArr[0][0] = 11;
spareArr[0][1] = 11;
spareArr[0][2] = sum;
//遍历二维数组 ,将非0 的值存放在sparseArr中
int count = 0;
for (int i =0;i<11;i++){
for (int j = 0;j<11;j++){
if (chessArr1[i][j]!=0){
count++;
spareArr[count][0] = i;
spareArr[count][1] = j;
spareArr[count][2] = chessArr1[i][j];
}
}
}
System.out.println("得到稀疏数组为~~~");
for (int i = 0; i < spareArr.length ; i++) {
System.out.printf("%d\t",spareArr[i][0]);
System.out.printf("%d\t",spareArr[i][1]);
System.out.printf("%d\t",spareArr[i][2]);
System.out.println();
}
// 1、先读取 稀疏数组的第一行根据第一行的数据 创建原始的二维数组
//
int chessArr2[][] = new int[spareArr[0][0]][spareArr[0][1]];
//
System.out.println();
System.out.println("恢复后的二维数组");
// 2、在读取稀疏数组后几行数据 并赋予原始的二维数组即可
for (int i = 1; i < spareArr.length; i++) {
chessArr2[spareArr[i][0]][spareArr[i][1]] = spareArr[i][2];
}
// 输出恢复后的数组
for (int[] row:chessArr2){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}
作业:在本节 稀疏数组保存到磁盘上 比如 map.data
恢复原来的数组时 读取 map.data 进行回复