数据结构--稀疏矩阵的一种实现
生活随笔
收集整理的這篇文章主要介紹了
数据结构--稀疏矩阵的一种实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package mainimport ("encoding/json""fmt""os"
)//定義一個結構體保存原始矩陣的信息
type sparseNode struct {Row intCol intVal int
}//定義一個結構體保存反序列化后矩陣的信息
type unSparseNode struct {Row intCol intVal int
}func main(){//1.定義一個原始矩陣var arr [11][11]intarr[1][2] = 1arr[2][3] = 2//2.打印原始矩陣for _, v1 := range arr{for _, v2 := range v1{fmt.Printf("%d ", v2)}fmt.Println()}//3.將原始矩陣轉換為一個稀疏矩陣//思路:// 定義一個切片用來作為稀疏矩陣// 稀疏矩陣只保存原始矩陣的特殊信息:// 稀疏矩陣的第一個元素保存矩陣的大小和默認值// 稀疏矩陣中保存原始矩陣中不是默認值的行、列、值的信息//定義一個稀疏矩陣切片var sparseArr []sparseNode//先保存稀疏矩陣中第一個元素,即原始矩陣的大小和默認值valNode := sparseNode{Row: 11,Col: 11,Val: 0,}sparseArr = append(sparseArr, valNode)//接著保存原始矩陣中的特殊信息到稀疏矩陣for i, v1 := range arr{for j, v2 := range v1{if v2 != 0{valNode := sparseNode{Row: i,Col: j,Val: v2,}sparseArr = append(sparseArr, valNode)}}}//打印稀疏矩陣for _, v := range sparseArr{fmt.Printf("%d %d %d\n", v.Row, v.Col, v.Val)}//4.到這里就完成了原始矩陣轉換稀疏矩陣,根據實際應用可以將稀疏矩陣落盤到文件或者通過網絡發送給其他人//其中落盤的方式有多種,可以按照稀疏矩陣直接落盤,或者將稀疏矩陣進行序列化為json字符串落盤到文件//這里使用較為復雜的序列化落盤方式實現,json字符串既可以落盤,也可以網絡傳輸bytes, err := json.Marshal(&sparseArr)if err != nil {panic(err)}//5.打印序列化后的JSON字符串fmt.Println(string(bytes))//6.到這里就可以將JSON字符串進行落盤或者網絡傳輸了,這里先實現落盤存儲w, err := os.Create("sparseArr.json")if err != nil {panic(err)}defer w.Close()_, err = w.Write(bytes)if err != nil {panic(err)}//------------------------還原稀疏矩陣為原始矩陣------------------------------//1.打開磁盤文件讀取數據r, err := os.Open("sparseArr.json")if err != nil {panic(err)}defer r.Close()fileInfo, err := r.Stat()if err != nil {panic(err)}buf := make([]byte, fileInfo.Size())_, err = r.Read(buf)if err != nil {panic(err)}//2.反序列化JSON字符串,首先定義一個結構體unSparseNode用來保存反序列化數據//再定義一個切片存儲反序列化后的所有數據var unSparseArr []unSparseNodeerr = json.Unmarshal(buf, &unSparseArr)if err != nil {panic(err)}//3.打印反序列化后的數據fmt.Println(unSparseArr)//4.根據反序列化后的切片數據還原原始矩陣//在初始化二維數組的時候遇到了一個問題,就是在初始化的時候數組大小必須指定常量//如果哪位大神有其他思路歡迎留言一起探討,我暫時就這樣寫死了unArr := make([][11]int, unSparseArr[0].Row)for i, v1 := range unSparseArr{if i != 0 {unArr[v1.Row][v1.Col] = v1.Val}}//5.打印還原后的原始矩陣for _, v1 := range unArr{for _, v2 := range v1{fmt.Printf("%d ", v2)}fmt.Println()}
}
總結
以上是生活随笔為你收集整理的数据结构--稀疏矩阵的一种实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冒泡排序(数组)的一种实现
- 下一篇: 数据结构--队列(数组)的一种实现