1.介绍
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
  
稀疏数组的处理方法是:

1.记录数组一共有几行几列,有多少个不同的值
  
2.把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

2.分析

3.代码实现

    public class SparseArray
{
public static void Test()
{
int[][] chessArr = new int[][]; //
int sum = ; Console.WriteLine("\n初始化棋盘");
//初始化棋盘
for (int i = ; i < chessArr.Length; i++)
{
chessArr[i] = new int[]; for (int j = ; j < chessArr[i].Length; j++)
{ if (i == && j == )
{
chessArr[i][j] = ; sum++;
} if (i == && j == )
{
chessArr[i][j] = ; sum++;
} Console.Write(chessArr[i][j] + "\t");
} Console.WriteLine();
} Console.WriteLine("\n初始化非零的个数:"+sum); //创建对应的稀疏数组
int[][] sparseArr =new int[][]; for (int i = ; i < sparseArr.Length; i++)
{
sparseArr[i] = new int[];
} sparseArr[][] = ; sparseArr[][] = ; sparseArr[][] = sum; int count = ; for (int i = ; i < chessArr.Length; i++)
{
for (int j = ; j < chessArr[i].Length; j++)
{
if (chessArr[i][j]!=)
{
count++;
sparseArr[count][] = i;
sparseArr[count][] = j;
sparseArr[count][] = chessArr[i][j];
}
}
} Console.WriteLine("\n稀疏数组的形式:"); foreach (var row in sparseArr)
{
foreach (var data in row)
{
Console.Write($"{data}\t");
} Console.WriteLine();
} int[][] newChessArr = new int[sparseArr[][]][]; for (int i = ; i < newChessArr.Length; i++)
{
newChessArr[i] = new int[sparseArr[][]];
} for (int i = ; i < sparseArr.Length; i++)
{
newChessArr[sparseArr[i][]][sparseArr[i][]] = sparseArr[i][];
} Console.WriteLine("\n还原后棋盘:");
foreach (var row in newChessArr)
{
foreach (var data in row)
{
Console.Write($"{data}\t");
} Console.WriteLine();
}
}
}

C#数据结构与算法系列(二):稀疏数组(SparseArray)的更多相关文章

  1. Java数据结构和算法(二)——数组

    上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...

  2. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  3. javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例

    栈(Stack)是限定仅在表尾进行插入或删除操作的线性表.表尾为栈顶(top),表头为栈底(bottom),不含元素的空表为空栈. 栈又称为后进先出(last in first out)的线性表. 堆 ...

  4. 数据结构与算法系列2 线性表 链表的分类+使用java实现链表+链表源码详解

    数据结构与算法系列2.2 线性表 什么是链表? 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表的链接次序实现的一系列节点组成,节点可以在运行时动态生成,每个节点包括两个 ...

  5. 你听过稀疏数组(sparseArray)吗?

    稀疏数组(sparseArray) 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: 1.记录数组一共有几行几列,有多少个不同的值 ...

  6. 稀疏数组SparseArray

    1 实际需求 1.1 需求提出 编写五子棋程序,有存盘退出和续上盘的功能. 实现思路: 存盘退出: 定义一个二维数组,默认值是0,黑子表示1,蓝子表示2,然后将二维数组通过流存储到文件中. 换言之:五 ...

  7. 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数

    题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...

  8. Java数据结构和算法(二):数组

    上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要 ...

  9. 翻阅《数据结构与算法javascript描述》--数组篇

    导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性 ...

随机推荐

  1. view组件的封装是否需要特有模型?

    必须需要. 现在接手的老项目,所有自定义组件全部使用的原始的全量数据,作为模型给view用来展示. 结果发现,基本数据的选择错误,需要选择另一个数据作为基本数据,这导致一个很麻烦的问题,需要改动全部的 ...

  2. 基于 abp vNext 和 .NET Core 开发博客项目 - 接入GitHub,用JWT保护你的API

    上一篇文章(https://www.cnblogs.com/meowv/p/12924859.html)再次把Swagger的使用进行了讲解,完成了对Swagger的分组.描述和开启小绿锁以进行身份的 ...

  3. POJ3436

    题目链接:http://poj.org/problem?id=3436 题目大意: 一台电脑可以分成P个部分,在生产过程中,半成品电脑有的部分已经完成(记为1),而有的部分还没有完成(记为0).电脑生 ...

  4. 三、HTML元素

    嵌套的HTML元素 <!--以下实例包含了三个HTML元素,分别是<html>.<body>.<p>--> <!DOCTYPE html> ...

  5. shell判断语句

    1.test命令  也可以用[  ]来表示 返回值为0时为true,返回值为1时为false. 例1:str1=aaa,str2=bbb 1)判断字符串是否为空(省略了-n选项,-n选项是不为空,-z ...

  6. nodejs模块介绍与使用

    1.内置模块 http fs path url os等等 (无需安装直接require引入即可) 2.第三方模块: express mysql ejs等等 (npm包管理工具下载require引入) ...

  7. PIC单片机的定时器

    PIC单片机的定时器有3个 timer0 timer1 timer2 定时器的计算方法 256*k*Tcy=定时时间 (256-Init-value)*k*Tcy=定时时间

  8. Matlab GUI程序设计入门——信号发生器+时域分析

    背景:学习matlab gui编程入门,完成一个基于GUIDE的图形化界面程序,结合信号生成及分析等. 操作步骤: 1.新建程序 新建一个GUIDE程序 这里选择第一个选项,即创建一个空白的GUIDE ...

  9. jchdl - RTL实例 - AndAnd

    https://mp.weixin.qq.com/s/JhUB3M1WhjAyUrN1HPIPTA   AndAnd是三输入与门模块,输出为相与的结果.   参考链接 https://github.c ...

  10. 使用setTimeout()代替setInterval()

    背景: 在JavaScript中,有两种定时器:setTimeout()和setInterval():setTimeout()只执行一次定时操作,setInterval()执行无限次定时操作:但是大多 ...