zoukankan      html  css  js  c++  java
  • 1,稀疏数组

    “二维数组”转“稀疏数组”实现思路:

    1)遍历二维数组,得到有效数据个数sum

    2)根据sum就可以创建稀疏数组sparseArray[sum+1,3] 

    3)将二维数组有效数据存到稀疏数组中

    “稀疏数组”转“二维数组”实现思路:

    1)读取稀疏数组第一行创建原始二维数组

    2)从稀疏数组第二行开始读取数据到二维数组

    C#实现代码:

     1 using System;
     2 
     3 namespace 数据结构
     4 {
     5     public class SparseArray
     6     {
     7         static void Main(string[] args)
     8         {
     9             #region 创建原始二维数组
    10             //0表示没有棋子,1表示白棋,2表示黑棋
    11             int row = 11;
    12             int col = 11;
    13             int[,] chessAarry1 = new int[row, col];
    14             chessAarry1[1, 2] = 1;
    15             chessAarry1[2, 3] = 2;
    16             chessAarry1[5, 6] = 1;
    17             chessAarry1[3, 5] = 2;
    18 
    19             //打印二维数组
    20             Console.WriteLine("打印原始二维数组:");
    21             for (int r = 0; r < chessAarry1.GetLength(0); r++)
    22             {
    23                 for (int i = 0; i < chessAarry1.GetLength(1); i++)
    24                 {
    25                     Console.Write($"{chessAarry1[r, i]}	");
    26                 }
    27                 Console.WriteLine("");
    28             }
    29             #endregion
    30 
    31             #region 创建稀疏数组
    32             //(1)统计原始二维数组有效数据
    33             int sum = 0;
    34             foreach (var item in chessAarry1)
    35             {
    36                 if (item > 0) sum++;
    37             }
    38             int[,] sparseArray = new int[sum + 1, 3];
    39             sparseArray[0, 0] = row;
    40             sparseArray[0, 1] = col;
    41             sparseArray[0, 2] = sum;
    42 
    43             //(2)从原始二维数组读取有效数据到稀疏数组
    44             int insert = 0;
    45             for (int r = 0; r < chessAarry1.GetLength(0); r++)
    46             {
    47                 for (int i = 0; i < chessAarry1.GetLength(1); i++)
    48                 {
    49                     var val = chessAarry1[r, i];
    50                     if (val > 0)
    51                     {
    52                         insert++;
    53                         sparseArray[insert, 0] = r;
    54                         sparseArray[insert, 1] = i;
    55                         sparseArray[insert, 2] = val;
    56                     }
    57                     if (sum == insert) break;
    58                 }
    59                 if (sum == insert) break;
    60             }
    61 
    62             //打印稀疏数组
    63             Console.WriteLine("打印稀疏数组:");
    64             for (int r = 0; r < sparseArray.GetLength(0); r++)
    65             {
    66                 Console.WriteLine($"{sparseArray[r, 0]}	{sparseArray[r, 1]}	{sparseArray[r, 2]}");
    67             }
    68             #endregion
    69 
    70             #region 恢复原始二维数组
    71             //(1)创建所有元素都为0的二维数组
    72             int row2 = sparseArray[0, 0];
    73             int col2 = sparseArray[0, 1];
    74             int val2 = sparseArray[0, 2];
    75             int[,] chessAarry2 = new int[row2, col2];
    76             //(2)从稀疏数组读取有效数据到原始二维数组
    77             for (int r = 1; r < sparseArray.GetLength(0); r++)
    78             {
    79                 row2 = sparseArray[r, 0];
    80                 col2 = sparseArray[r, 1];
    81                 val2 = sparseArray[r, 2];
    82                 chessAarry2[row2, col2] = val2;
    83             }
    84 
    85             //打印二维数组
    86             Console.WriteLine("打印原始二维数组:");
    87             for (int r = 0; r < chessAarry2.GetLength(0); r++)
    88             {
    89                 for (int i = 0; i < chessAarry2.GetLength(1); i++) 
    90                 {
    91                     Console.Write($"{chessAarry2[r, i]}	");
    92                 }
    93                 Console.WriteLine();
    94             }
    95             #endregion
    96         }
    97     }
    98 }

     

  • 相关阅读:
    UVA-448
    算法提高-集合选取
    算法训练Maze
    UVA-10061
    树状数组
    前缀和
    【UVA
    统计Linux下的CPU状态信息
    Android_内部文件读取
    Android打开/data/目录以及导出文件
  • 原文地址:https://www.cnblogs.com/xiaojvhuang/p/12669878.html
Copyright © 2011-2022 走看看