go语言数据结构之-稀疏数组

package main

import (
"fmt"
"os"
"strconv"
)

func main() {
//创建一个二维数组,并且保存数据
var chessmap [11][11]int
chessmap[1][2] = 1
chessmap[2][3] = 2
//fmt.Println(chessmap)
//输出看看原始的数组
for _, v := range chessmap {
//fmt.Println(v)
for _, v2 := range v {
fmt.Printf("%d\t", v2)
}
fmt.Println()
}
//转成稀疏数组
/*
1、遍历上面的数组,发现有不等于0的数据,创建一个NODE节点,NODE包含行、列、相应值三个字段
2、将不等于0的数据放入到对应的切片,相当于一个结构体切片[]NODE,
*/
//切片第一个数据保存原始二维数组的规模,几行几列
var sparsArr []NODE
valNODE := NODE{
row: 11,
col: 11,
val: 0,
}
sparsArr = append(sparsArr, valNODE)

for i, v := range chessmap {
//fmt.Println(v)
for j, v2 := range v {
if v2 != 0 {
valNODE := NODE{
row: i,
col: j,
val: v2,
}
sparsArr = append(sparsArr, valNODE)
}
}
}
//输出稀疏数组
fmt.Println(sparsArr)
fmt.Println("-----------")
//换个格式输出一下稀疏数组
for i, valN := range sparsArr {
if i == 0 {
fmt.Printf("总共%d行,%d列\n", valN.row, valN.col)
} else {
fmt.Printf("第%d行 第%d列 值为%d\n", valN.row, valN.col, valN.val)
}
}
//再把稀疏数组转成原始数组存到文件中
fileobj, err := os.OpenFile("720数据结构/队列/xx.txt", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
if err != nil {
fmt.Println("open file failed, err:", err)
return
}
defer fileobj.Close()
var var2 [11][11]int
fmt.Println("++++++++++++")
fmt.Println(var2)
fmt.Println("++++++++++++")
for i, v1 := range sparsArr {
fmt.Println("++++++++++++---------")
fmt.Printf("%#v", v1)
if i != 0 {
var2[v1.row][v1.col] = v1.val
}
}
fmt.Println("%%%%%%%%%%%%%%%%%%")
for _, v := range var2 {
//fmt.Println(v)
for _, v2 := range v {
fileobj.Write([]byte(strconv.Itoa(v2)))
}
fileobj.Write([]byte("\n"))
}
}

type NODE struct {
row int
col int
val int
}
上一篇:10.26训练赛


下一篇:定义二维结构体常量数组