掌握知识:

  • 数组的初始化和赋值
  • 结构体的初始化和赋值
  • 字符串和整型之间的转换以及其它的一些操作
  • 类型断言
  • 读取文件
  • 写入文件
  • 对稀疏数组进行压缩
package main

import (
"bufio"
"fmt"
"io"
"os"
"strconv"
"strings"
// "strconv"
) func originArr() [][]int {
//创建原始数组
var chessMap [][]int chessMap[][] =
chessMap[][] =
return chessMap
} func printArr(chessMap [][]int) {
//打印数组
for _, v1 := range chessMap {
for _, v2 := range v1 {
fmt.Printf("%d\t", v2)
}
fmt.Println()
}
} //存储行、列、值
type valNode struct {
row int
col int
//这里是接口类型,所以值可以是任意类型,不仅仅包含整型和字符型
value interface{}
} var sparseArr []valNode func doParseArr(chessMap [][]int) []valNode {
//稀疏数组
//遍历数组,如果某个值不为零,则将其放置在对应的结构体中
val := valNode{
//原来数组的行和列以及值
row: ,
col: ,
value: ,
}
//初始化存储稀疏数组
sparseArr = append(sparseArr, val) for i, v1 := range chessMap {
for j, v2 := range v1 {
if v2 != {
var val valNode
val.row = i
val.col = j
val.value = v2
sparseArr = append(sparseArr, val)
}
}
} for _, j := range sparseArr {
fmt.Printf("第%d行,第%d列的值是%d\n", j.row, j.col, j.value.(int)) }
return sparseArr
} func writeParseArr(sparseArr []valNode, filepath string) {
//将稀疏数组存储
file, err := os.OpenFile(filepath, os.O_CREATE|os.O_APPEND|os.O_WRONLY, )
if err != nil {
return
}
defer file.Close()
for _, j := range sparseArr {
//因为读取到的整型,需要转为字符串再进行写入
//将接口赋值给一个变量需要进行类型断言
str := strconv.Itoa(j.row) + " " + strconv.Itoa(j.col) + " " + strconv.Itoa((j.value.(int))) + "\n"
wriiter := bufio.NewWriter(file)
wriiter.WriteString(str)
wriiter.Flush()
// fmt.Printf("第%d行,第%d列的值是%d\n", j.row, j.col, j.value.(int)) }
} func readParseArr(filepath string) (newChessMap [][]int) {
//初始化数组
//读取存储的文件,并将每行转成
file, err := os.OpenFile(filepath, os.O_RDONLY, )
if err != nil {
return
}
defer file.Close()
reader := bufio.NewReader(file)
for {
str, err := reader.ReadString('\n')
if err != nil {
return
}
tmp := strings.Split(strings.TrimRight(str, "\n"), " ")
// fmt.Println(strings.Split(strings.TrimRight(str, "\n"), " "))
r, _ := strconv.Atoi(tmp[])
c, _ := strconv.Atoi(tmp[])
v, _ := strconv.Atoi(tmp[])
if r == {
continue
}
newChessMap[r][c] = v
if err == io.EOF {
break
}
}
return newChessMap
} func main() {
chessMap := originArr()
printArr(chessMap)
sparseArr := doParseArr(chessMap)
filepath := "data.txt"
writeParseArr(sparseArr, filepath)
newChessMap := readParseArr(filepath)
printArr(newChessMap)
}

data.txt

golang数据结构之稀疏数组的更多相关文章

  1. 图解Java数据结构之稀疏数组

    在编程中,算法的重要性不言而喻,没有算法的程序是没有灵魂的.可见算法的重要性. 然而,在学习算法之前我们需要掌握数据结构,数据结构是算法的基础. 我在大学的时候,学校里的数据结构是用C语言教的,因为对 ...

  2. 数据结构(1):稀疏数组使用java实现

    主要是用于数组压缩,去除无效的数组内容: 原数组内容: 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 转换成 稀疏数组 5 5 2 1 1 1 2 ...

  3. Java数据结构之稀疏数组(Sparse Array)

    1.需求 编写的五子棋程序中,有存盘退出和续上盘的功能.因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据,为了压缩存储所以采用稀疏数组. 2.基本介绍 当一个数组中大部分元素为0,或者为 ...

  4. 数据结构与算法之java语言实现(一):稀疏数组

    一.概念&引入 什么是稀疏数组? 稀疏数组是面对一个二维数组中有众多重复元素的情况下,为了节省磁盘空间,将此二维数组转化为更加节省空间的一种数组,我们叫他稀疏数组. 只是听概念或许会看不明白, ...

  5. 【学习总结】java数据结构和算法-第三章-稀疏数组和队列

    相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...

  6. 数据结构和算法(Golang实现)(13)常见数据结构-可变长数组

    可变长数组 因为数组大小是固定的,当数据元素特别多时,固定的数组无法储存这么多的值,所以可变长数组出现了,这也是一种数据结构.在Golang语言中,可变长数组被内置在语言里面:切片slice. sli ...

  7. Java成神之路:第二帖---- 数据结构与算法之稀疏数组

    数据结构与算法--稀疏数组 转换方法 记录数组有几行几列,有多少个不同的值 把不同的值的元素的行列,记录在一个小规模的数组中,以此来缩小数组的规模 如图: 二维数组转稀疏数组 对原始的二维数组进行遍历 ...

  8. JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

    本文源码:GitHub·点这里 || GitEE·点这里 一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反, ...

  9. 数据结构 二维数组-->稀疏数组-->二维数组

    稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不 ...

随机推荐

  1. vue项目空格报错,缩进不对报错,格式报错!!!

    vue-cli构建项目之后发现写几句代码就会报错,但是语法什么的都没有问题,只是因为缩进.空格之类的,对于初学者格式不规范的人来说是相当难受的 图中框住的位置都会报错!! 现在有两种办法: 1.是因为 ...

  2. December 07th, Week 49th Saturday, 2019

    Snowflakes are pretty patterns etched in water's dreams. 雪花,是水在梦中镌刻的美丽图案. From Anthony T.Hincks. Tod ...

  3. August 18th, 2019. Week 34th, Sunday

    Fear doesn't shut you down, it wakes you up. 恐惧不会消磨你的意志,它能激发你的潜能. We all know that fear is powerful, ...

  4. 08-Django 模板

    需要教程的请关注个人微信公众号 模板:产生html,用于控制页面的展示,模板不仅仅是一个html文件,它包含两部分内容: 静态内容:css,js,image 动态内容:用模板语言语言动态的产生一些网页 ...

  5. linux上安装jenkins过程

    最近在学到jenkins分布式构建时,需要一台部署jenkins的主机服务器master,自己用的win10作为slave,所以我想在虚拟机上先部署jenkins. centos还是ubuntu呢,算 ...

  6. Sass、LESS 和 Stylus各有千秋

    废话不多说直接上连接  为您详细比较三个 CSS 预处理器(框架):Sass.LESS 和 Stylus  

  7. mySql中Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题

    报错信息 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'a.id' ...

  8. spring的简易实现(一)

    [练习]spring的简易实现(一) 在第一部分我们实现读取xml的配置,然后实例化xml中的bean 首先定义一个xml和相关的class类 <?xml version="1.0&q ...

  9. 某小公司RESTful、共用接口、前后端分离、接口约定的实践

    作者:邵磊 juejin.im/post/59eafab36fb9a045076eccc3 前言 随着互联网高速发展,公司对项目开发周期不断缩短,我们面对各种需求,使用原有对接方式,各端已经很难快速应 ...

  10. Windows下第一个驱动程序

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 参考下面博客: VS2017搭建驱动开发环境WDK :https: ...