我的Java数据结构学习-2---稀疏数组
数据结构:线性结构 非线性结构。
线性结构:顺序存储结构 / 链式存储结构
第一个案例:稀疏数组
稀疏数组案例:
稀疏数组:思路:
代码实现:
1 package Demo1.SparseArray; 2 3 public class SparseArr { 4 public static void main(String[] args) { 5 6 SparseArr sparseArr = new SparseArr(); 7 8 //(0,表示没有棋子,1表示黑子,2表示白子) 9 //1.创建原始的二位数组(棋盘) 10 int[][] chessAray1 = new int[11][11]; 11 chessAray1[1][2]=1; 12 chessAray1[2][3]=2; 13 chessAray1[2][2]=2; 14 chessAray1[5][3]=1; 15 //查看原始数组 16 System.out.println("原始二维数组:"); 17 sparseArr.PrintfForByArray(chessAray1); 18 //转换稀疏数组: 19 System.out.println("优化二维数组:----》稀疏数组:"); 20 int[][] sparse = sparseArr.Sparce(chessAray1); 21 sparseArr.PrintfForByArray(sparse); 22 23 //稀疏数组转换回原始二维数组 24 System.out.println("稀疏数组----->原始数组:"); 25 int[][] chessArray = sparseArr.chessArray(sparse); 26 sparseArr.PrintfForByArray(chessArray); 27 28 29 30 } 31 //封装将二维数组转换为稀疏数组方法:稀疏数组 int【sum+1】【3】 32 public int[][] Sparce(int[][] array){ 33 34 //1.遍历二维数组,得到非零数据的个数 35 int sum =0; 36 for (int i = 0; i < array.length; i++) { 37 38 for (int j = 0; j < array[0].length; j++) { 39 if (array[i][j]!=0){ 40 sum++; 41 } 42 } 43 } 44 //2.创建对应的稀疏数组 45 int[][] SparseArray = new int[sum+1][3]; 46 //给稀疏数组复制 47 SparseArray[0][0]=array.length;//存二维数组的行值 48 SparseArray[0][1]=array[0].length;//存二维数组的列值 49 SparseArray[0][2]=sum; 50 51 //遍历二维数组,将非零的值存放到稀疏数组中 52 //定一个计数,给新的数组顺序。 53 int count =0; 54 55 for (int i = 0; i < array.length; i++) { 56 for (int j = 0; j < array[0].length; j++) { 57 if (array[i][j]!=0){ 58 count++; 59 SparseArray[count][0]=i; 60 SparseArray[count][1]=j; 61 SparseArray[count][2]=array[i][j]; 62 } 63 } 64 } 65 //查看稀疏数组 66 // System.out.println("稀疏数组:"); 67 // PrintfForByArray(SparseArray); 68 69 70 return SparseArray; 71 } 72 73 //封装循环遍历二维数组打印方法: 74 public void PrintfForByArray(int[][] SparseArray){ 75 for (int[] item : SparseArray) { 76 for (int data : item) { 77 System.out.printf("%d\t",data); 78 } 79 System.out.println(); 80 } 81 } 82 //封装将稀疏数组恢复为原始数组方法: 83 public int[][] chessArray(int[][] SparseArray){ 84 //还原稀疏数组保存的原始数组的行列 85 int row = SparseArray[0][0]; 86 int low = SparseArray[0][1]; 87 //建立原始数组 88 int[][] chessArray = new int[row][low]; 89 //恢复原二维数组的值,有效数组是第二行开始 90 for (int i = 1; i < SparseArray.length; i++) { 91 //获取稀疏数组的行与列 92 int rowTemp = SparseArray[i][0]; 93 int lowTemp = SparseArray[i][1]; 94 int result = SparseArray[i][2]; 95 chessArray[rowTemp][lowTemp]=result; 96 } 97 return chessArray; 98 } 99 100 101 102 103 }
作者:隔壁老郭
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
Java入门到入坟
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南