激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解

Java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解

2022-02-19 14:12葉綠體不忘呼吸 Java教程

稀疏數(shù)組是用于優(yōu)化,壓縮具有以下特點(diǎn)的二維數(shù)組:當(dāng)二維數(shù)組中的元素大部分相同,有意義的數(shù)據(jù)元素較少時(shí),可以使用稀疏數(shù)組進(jìn)行簡(jiǎn)化,節(jié)省存儲(chǔ)空間

基本介紹

當(dāng)一個(gè)數(shù)組中大部分元素為0,或者為同一個(gè)值的數(shù)組時(shí),可以使用稀疏數(shù)組來保存該數(shù)組。

稀疏數(shù)組的處理方法是:
①記錄數(shù)組一共有幾行幾列,有多少個(gè)不同的值(0除外)。
②把具有不同值的元素的行列及值記錄在一個(gè)小規(guī)模的數(shù)組中,從而縮小程序的規(guī)模。

Java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解

二維數(shù)組轉(zhuǎn)稀疏數(shù)組:
①遍歷原始的二維數(shù)組,得到有效數(shù)據(jù)的個(gè)數(shù) sum(除0外不同值)
②根據(jù) sum 創(chuàng)建稀疏數(shù)組 sparseArr int[sum+1][3]
③將二維數(shù)組的有效數(shù)據(jù)數(shù)據(jù)存入到稀疏數(shù)組
(稀疏數(shù)組的第一行,三列分別記錄二維數(shù)組的行、列、有效數(shù)據(jù)個(gè)數(shù))
(后面的行記錄有效數(shù)據(jù)元素,三列分別記錄行、列、有效數(shù)據(jù)元素值)

稀疏數(shù)組轉(zhuǎn)二維數(shù)組:
①先讀取稀疏數(shù)組的第一行,根據(jù)第一行的數(shù)據(jù),創(chuàng)建原始的二維數(shù)組
②再讀取稀疏數(shù)組后幾行的數(shù)據(jù),并賦給原始的二維數(shù)組即可

 

應(yīng)用實(shí)例

使用稀疏數(shù)組,來保留二維數(shù)組(棋盤、地圖等等),把稀疏數(shù)組存盤,并且可以重新恢復(fù)為原來的二維數(shù)組數(shù)。

如下為一個(gè)棋盤通過二維數(shù)組轉(zhuǎn)換為稀疏數(shù)組加以存盤和復(fù)盤:

Java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解

1、創(chuàng)建原始二維數(shù)組并輸出

		//創(chuàng)建一個(gè)原始的二維數(shù)組11*11,0表示無子,1表示黑子,2表示藍(lán)子
      int[][] chessArr1 = new int[11][11];
      chessArr1[1][2] = 1;
      chessArr1[2][3] = 2;
      //輸出原始二維數(shù)組
      for (int[] row : chessArr1){
          for (int data : row){
              System.out.print(data + "\t");
          }
          System.out.println();
      }

Java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解

2、將二維數(shù)組轉(zhuǎn)換為稀疏數(shù)組

		//將二維數(shù)組轉(zhuǎn)換為稀疏數(shù)組
      //先遍歷二維數(shù)組,得到非0數(shù)據(jù)的個(gè)數(shù)
      int sum = 0;
      for (int i = 0; i < chessArr1.length; i++) {
          for (int j = 0; j < chessArr1[i].length; j++) {
              if (chessArr1[i][j] != 0) sum++;
          }
      }
      //創(chuàng)建對(duì)應(yīng)的稀疏數(shù)組并賦值
      int[][] sparseArr = new int[sum + 1][3];
      sparseArr[0][0] = 11;
      sparseArr[0][1] = 11;
      sparseArr[0][2] = sum;
      int count = 0; //用于記錄賦值到第幾行
      for (int i = 0; i < chessArr1.length; i++) {
          for (int j = 0; j < chessArr1[i].length; j++) {
              if (chessArr1[i][j] != 0) {
                  count++;
                  sparseArr[count][0] = i;
                  sparseArr[count][1] = j;
                  sparseArr[count][2] = chessArr1[i][j];
              }
          }
      }
      //輸出稀疏數(shù)組
      for (int[] row : sparseArr){
          for (int data : row){
              System.out.print(data + "\t");
          }
          System.out.println();
      }

Java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解

3、將稀疏數(shù)組轉(zhuǎn)回二維數(shù)組

      //將稀疏數(shù)組轉(zhuǎn)換為二維數(shù)組
      int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
      //讀取賦值
      for (int i = 1; i < sparseArr.length; i++) {
          chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
      }
      //輸出
      for (int[] row : chessArr2){
          for (int data : row){
              System.out.print(data + "\t");
          }
          System.out.println();
      }

Java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解

到此這篇關(guān)于Java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解的文章就介紹到這了,更多相關(guān)Java 稀疏數(shù)組內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/m0_46653805/article/details/120680515

延伸 · 閱讀

精彩推薦
  • Java教程Java中的常用輸入輸出語句的操作代碼

    Java中的常用輸入輸出語句的操作代碼

    這篇文章主要介紹了Java中的常用輸入輸出語句的操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參...

    Lu_kuan@9282021-08-04
  • Java教程springboot 如何配置多個(gè)jndi數(shù)據(jù)源

    springboot 如何配置多個(gè)jndi數(shù)據(jù)源

    這篇文章主要介紹了springboot 如何配置多個(gè)jndi數(shù)據(jù)源的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教...

    UziNb6472021-10-22
  • Java教程Mybatis-Plus BaseMapper的用法詳解

    Mybatis-Plus BaseMapper的用法詳解

    這篇文章主要介紹了Mybatis-Plus BaseMapper的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下...

    金色的魚兒5662020-08-27
  • Java教程springboot項(xiàng)目攔截器重定向循環(huán)問題的解決

    springboot項(xiàng)目攔截器重定向循環(huán)問題的解決

    這篇文章主要介紹了springboot項(xiàng)目攔截器重定向循環(huán)問題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教...

    yumi332210642021-12-14
  • Java教程java冒泡排序和選擇排序詳解

    java冒泡排序和選擇排序詳解

    這篇文章主要介紹了java數(shù)組算法例題代碼詳解(冒泡排序,選擇排序),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋...

    Stars-Nine4682021-09-24
  • Java教程idea中創(chuàng)建多module的maven工程的方法

    idea中創(chuàng)建多module的maven工程的方法

    這篇文章主要介紹了idea中創(chuàng)建多module的maven工程的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧...

    烏龜殼10222021-06-08
  • Java教程spring boot實(shí)戰(zhàn)教程之shiro session過期時(shí)間詳解

    spring boot實(shí)戰(zhàn)教程之shiro session過期時(shí)間詳解

    這篇文章主要給大家介紹了關(guān)于spring boot實(shí)戰(zhàn)教程之shiro session過期時(shí)間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的...

    思與學(xué)7942021-01-14
  • Java教程Java命令設(shè)計(jì)模式詳解

    Java命令設(shè)計(jì)模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java命令設(shè)計(jì)模式,對(duì)命令設(shè)計(jì)模式進(jìn)行分析理解,感興趣的小伙伴們可以參考一下 ...

    wangxin03144902020-03-27
主站蜘蛛池模板: 91精品国产一区二区在线观看 | av中文字幕免费在线观看 | 久久久久久久亚洲视频 | 免费一区二区三区 | 黄色a级片免费观看 | 蜜桃久久一区二区三区 | 国产做爰 | 久久久精品视频国产 | 国产在线区| 色阁av | 亚洲国产成人一区二区 | 龙的两根好大拔不出去h | 久久老司机精品视频 | 国产午夜网 | 91国内精品久久久久免费影院 | 特级a欧美做爰片毛片 | 国产精品1区,2区,3区 | 欧美日本91精品久久久久 | 国产88久久久国产精品免费二区 | 久久撸视频| 狠狠操夜夜爱 | 天天夜干| 欧美日本一区二区 | 国产精品wwww | 欧美精品久久天天躁 | 最新中文字幕在线视频 | 男人的天堂视频网站 | 在线看免电影网站 | 蜜桃传媒视频麻豆第一区免费观看 | 久久男人 | 亚洲爱爱图 | 黄网站色成年大片免费高 | 性大片性大片免费 | 91香焦视频| 小视频在线看 | 免费观看一级欧美大 | 欧美成人一区二区三区电影 | 看免费黄色大片 | 国产精品久久久久久影院8一贰佰 | 男女羞羞在线观看 | 中文字幕在线观看1 |