zoukankan      html  css  js  c++  java
  • 数据结构之稀释数组


    阅读目录

    一、稀释数组

    二、稀释数组应用

    一、 稀释数据

    1.实际需求



    2.基本介绍



    二、稀释数组应用

    1.存放棋盘

    type ValueNode struct {
    	row int
    	col int
    	val int
    }
    
    func main() {
    	// 1.创建原始数组
    	var chessMap [11][11]int
    	chessMap[1][2] = 1 //黑子
    	chessMap[2][3] = 2 //白子
    
    	// 2. 输出查看原始数组
    	for _, v := range chessMap {
    		for _, v1 := range v {
    			fmt.Printf("%d	", v1)
    		}
    		fmt.Println()
    	}
    	// 3. 转成稀疏数组 -> 算法
    	//(1)遍历chessMap 如果我们发现一个元素的值不为0,创建一个node结构体
    	//(2)将其放入到对应的切片中
    	var sparseArr []ValueNode
    
    	// 标准稀疏数组,二维数组行 列 默认值
    	valNode := ValueNode{
    		row: 11,
    		col: 11,
    		val: 0,
    	}
    	sparseArr = append(sparseArr, valNode)
    
    	for k, v := range chessMap {
    		for k1, v1 := range v {
    			if v1 != 0 {
    				// 创建一个ValNode节点
    				valNode := ValueNode{
    					row: k,
    					col: k1,
    					val: v1,
    				}
    				// 标准的稀疏数组还需要包含有几行几列
    				sparseArr = append(sparseArr, valNode)
    
    			}
    		}
    		fmt.Println()
    	}
    	fmt.Println("稀疏数组是:")
    	for i, node := range sparseArr {
    		fmt.Printf("%d: %d %d %d
    ", i, node.row, node.col, node.val)
    	}
    
    	// 4.稀疏数组恢复棋盘
    	var chessMap2 [11][11]int
    
    	for i, v3 := range sparseArr {
    		if i != 0 { // 跳过第一行
    			chessMap2[v3.row][v3.col] = v3.val
    		}
    
    	}
    
    	fmt.Println("恢复后的原始数据.......")
    	for _, v := range chessMap2 {
    		for _, v1 := range v {
    			fmt.Printf("%d	", v1)
    		}
    		fmt.Println()
    	}
    }
    
  • 相关阅读:
    js插件-图片椭圆轮播效果
    js-放大镜效果
    vue使用技巧,及遇到的问题
    vue的传参方式和router使用技巧
    关于new Date()的日期格式处理
    图片上传预览
    缓动动画的原理
    input不能输入汉字和负数
    上传格式判断方法
    Vue-cli3.0配置全局less
  • 原文地址:https://www.cnblogs.com/zhangliang91/p/11701200.html
Copyright © 2011-2022 走看看