稀疏数组

稀疏数组

_

稀疏数组

sparsearray

package main

import "fmt"

// 稀疏数组

func main() {

	// 声明一个8x8的二维数组
	var array [8][8]int

	// 初始化一些值
	array[1][2] = 1
	array[2][3] = 2

	// 遍历二维数组
	for _, v := range array {
		for _, z := range v {
			fmt.Printf("%v ",z)
		}
		fmt.Println()
	}

	// 将二维数组转换为稀疏数组
	// 稀疏数组固定3列 = 行 、列、值

	// 获取二维数组的行
	var sums int
	for _, v := range array {
		for _, z := range v {
			if z != 0 {
				sums++
			}
		}
	}

	// 因为稀疏数组多一行用来存储原来的二维数组信息,所以稀疏数组的行为sums+1 列为 3
	// 创建稀疏数组
	sparseArray := make([][3]int, sums+1)
	// 插入第一行数据
	sparseArray[0][0] = len(array) //行
	sparseArray[0][1] = len(array[0]) // 列
	sparseArray[0][2] = sums // 多少个数据

	// 遍历二维数组,那个位置有值,就直接存入稀疏数组
	//定义稀疏数组的 行值  行值从第二行开始存,所以为下标为1
	count := 1
	for k, v := range array {
		for i ,z:= range v {
			if z != 0{
				sparseArray[count][0] = k
				sparseArray[count][1] = i
				sparseArray[count][2] = z
				count++
			}
		}
	}

	//遍历稀疏数组
	for _, v := range sparseArray {
		for _, z := range v {
			fmt.Printf("%v ",z)
		}
		fmt.Println()
	}

	// 在还原二维数组
	// 创建二维数组
	array2 := make([][]int, sparseArray[0][0])
	for i:= range array2 {
		array2[i] = make([]int,sparseArray[0][1])
	}
	
	// 还原数组
	for i := 1; i < len(sparseArray); i++ {
		array2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]
	}

	// 遍历二维数组
	for _, v := range array2 {
		for _, z := range v {
			fmt.Printf("%v ",z)
		}
		fmt.Println()
	}

}
ArrayList源码解析 2022-10-25
队列 2022-10-26

评论区