美文网首页
35.Go语言·数据结构·稀疏数组

35.Go语言·数据结构·稀疏数组

作者: 一枼落知天下 | 来源:发表于2019-06-18 14:40 被阅读0次

main.go

// Go语言·数据结构
package main

import (
    "bufio"
    "fmt"
    "io"
    "math/rand"
    "os"
    "strconv"
    "strings"
    "time"
)

var content string = `
————————————————Go语言·数据结构————————————————————
一、稀疏数组
    1.记录数组一共有几行几列,有多少个不同的值
    2.把具有不同的值的元素行列及值记录在一个小规模的数组中,从而缩小程序的规模
        0 0 0 1
        0 3 0 0
        0 0 5 0         
        1 0 0 0

        row col val
        4   4    0
        0   3    1
        1   1    3
        2   2    5
        3   0    1
`

type data struct {
    row int
    col int
    val int
}

func main() {
    readArr()
}

// 从原来数组---》生成稀疏数组--》保存文件
func storArr() {
    var orginArr [11][11]int
    rand.Seed(time.Now().UnixNano())
    for i := 0; i < 5; i++ {
        row := rand.Intn(11)
        col := rand.Intn(11)
        val := rand.Intn(11)
        orginArr[row][col] = val
    }

    for _, val := range orginArr {
        for _, v := range val {
            fmt.Printf("%d\t", v)
        }
        fmt.Println()
    }

    fmt.Println()
    var simpleSlice []data
    simpleSlice = append(simpleSlice, data{row: len(orginArr), col: len(orginArr[0]), val: 0})
    for i, val := range orginArr {
        for j, v := range val {
            if v == 0 {
                continue
            }
            dta := data{
                row: i,
                col: j,
                val: v,
            }
            simpleSlice = append(simpleSlice, dta)
        }
    }

    for _, val := range simpleSlice {
        fmt.Printf("%d\t%d\t%d \n", val.row, val.col, val.val)
    }

    // 1.新建一个文件,写入内容
    var filepath = "D:/日常工作/go/src/day35/dta.data"
    file, err := os.OpenFile(filepath, os.O_WRONLY|os.O_CREATE, 0666)
    if err != nil {
        fmt.Printf("err=%v \n", err)
        return
    }
    // 及时关闭句柄,否则会有内存泄漏
    defer file.Close()

    // *writer 使用带缓存的。
    writer := bufio.NewWriter(file)
    for _, val := range simpleSlice {
        content := fmt.Sprintf("%d\t%d\t%d\n", val.row, val.col, val.val)
        writer.WriteString(content)
    }
    // 将缓存中的数据,写入的文件
    writer.Flush()
}

// 从文件中读取稀疏数组,恢复到原来数组结构
func readArr() {
    var simpleSlice []data
    var filepath = "D:/日常工作/go/src/day35/dta.data"
    file, err := os.Open(filepath)
    defer file.Close()
    if err != nil {
        fmt.Println("OpenFile ERR:", err)
        return
    }
    // *reader 带缓冲
    reader := bufio.NewReader(file)
    // 循环读取
    for {
        // 一行一行的读取
        str, err := reader.ReadString('\n')
        // io.EOF表示文件的末尾
        if err == io.EOF {
            break
        }
        fmt.Print(str)
        strArr := strings.Split(strings.Trim(str, "\n"), "\t")
        row, _ := strconv.Atoi(strArr[0])
        col, _ := strconv.Atoi(strArr[1])
        val, _ := strconv.Atoi(strings.Trim(strArr[2], " "))
        dta := data{
            row: row,
            col: col,
            val: val,
        }
        simpleSlice = append(simpleSlice, dta)
    }

    orginArr := make([][]int, simpleSlice[0].row)
    for i := 0; i < simpleSlice[0].row; i++ {
        orginArr[i] = make([]int, simpleSlice[0].col)
    }

    for key, val := range simpleSlice {
        if key == 0 {
            continue
        }
        orginArr[val.row][val.col] = val.val
    }

    fmt.Println()
    for _, val := range orginArr {
        for _, v := range val {
            fmt.Printf("%d\t", v)
        }
        fmt.Println()
    }
}

相关文章

  • 35.Go语言·数据结构·稀疏数组

    main.go

  • 数据结构--稀疏数组

    概述 稀疏数组也是一种数组(总是二维的),是一种多维数组的数组压缩技术。比如存在一个的数组,但是数组中只有3个元素...

  • 数据结构之 稀疏数组

    作用 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 实现思路 1)记录数组一...

  • 数据结构入门教程-队列

    上节我们简单的了解了什么是稀疏数组以及通过一个案例来简单分析它,关于它的更多详情请移驾数据结构入门教程-稀疏数组,...

  • 数据结构——数组Array

    各类语言中的数组()是对此数据结构中的数组进行了封装,并添加了各自语言的特性。 1.定义 数组是一种线性表数据结构...

  • 数据结构002之稀疏数组

    什么是稀疏数组? 稀疏数组可以看做是对普通数组的压缩,普通数组是指无效数据量远大于有效数据量的数组,为什么要进行压...

  • 重学数据结构 --- 分类+稀疏数组

    一、数据结构的分类 1. 数据结构两大类 线性结构和非线性结构 1) 线性结构 线性结构是最常见的数据结构,特点是...

  • java数据结构之稀疏数组

    今天学习了数组中的一种-叫做稀疏数组。什么叫稀疏数组呢?如果一个数组(包括多维数组)中的大部分元素为0,或者为同一...

  • 数据结构-4.稀疏数组

    1. 当一个数组中大部分元素为 0,或者为同一个值时,可以使用稀疏数组来保存该数组 处理方法: 记录数组一共有多少...

  • 单向链表

    什么数据结构最优美,有人回答是数组。诚然,数组是很多数据结构的基础,就好比C语言在语言中的地位。但是当你做WEB开...

网友评论

      本文标题:35.Go语言·数据结构·稀疏数组

      本文链接:https://www.haomeiwen.com/subject/ogjfqctx.html