数据结构之稀释数组


阅读目录

一、稀释数组

二、稀释数组应用

一、 稀释数据

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\t", 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\n", 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\t", v1)
		}
		fmt.Println()
	}
}
posted @ 2019-10-18 22:27  初遇ぃ  阅读(342)  评论(0编辑  收藏  举报
//一下两个链接最好自己保存下来,再上传到自己的博客园的“文件”选项中 //一下两个链接最好自己保存下来,再上传到自己的博客园的“文件”选项中