golang数据结构之稀疏数组
掌握知识:
- 数组的初始化和赋值
- 结构体的初始化和赋值
- 字符串和整型之间的转换以及其它的一些操作
- 类型断言
- 读取文件
- 写入文件
- 对稀疏数组进行压缩
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数据结构之稀疏数组的更多相关文章
- 图解Java数据结构之稀疏数组
在编程中,算法的重要性不言而喻,没有算法的程序是没有灵魂的.可见算法的重要性. 然而,在学习算法之前我们需要掌握数据结构,数据结构是算法的基础. 我在大学的时候,学校里的数据结构是用C语言教的,因为对 ...
- 数据结构(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 ...
- Java数据结构之稀疏数组(Sparse Array)
1.需求 编写的五子棋程序中,有存盘退出和续上盘的功能.因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据,为了压缩存储所以采用稀疏数组. 2.基本介绍 当一个数组中大部分元素为0,或者为 ...
- 数据结构与算法之java语言实现(一):稀疏数组
一.概念&引入 什么是稀疏数组? 稀疏数组是面对一个二维数组中有众多重复元素的情况下,为了节省磁盘空间,将此二维数组转化为更加节省空间的一种数组,我们叫他稀疏数组. 只是听概念或许会看不明白, ...
- 【学习总结】java数据结构和算法-第三章-稀疏数组和队列
相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...
- 数据结构和算法(Golang实现)(13)常见数据结构-可变长数组
可变长数组 因为数组大小是固定的,当数据元素特别多时,固定的数组无法储存这么多的值,所以可变长数组出现了,这也是一种数据结构.在Golang语言中,可变长数组被内置在语言里面:切片slice. sli ...
- Java成神之路:第二帖---- 数据结构与算法之稀疏数组
数据结构与算法--稀疏数组 转换方法 记录数组有几行几列,有多少个不同的值 把不同的值的元素的行列,记录在一个小规模的数组中,以此来缩小数组的规模 如图: 二维数组转稀疏数组 对原始的二维数组进行遍历 ...
- JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
本文源码:GitHub·点这里 || GitEE·点这里 一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反, ...
- 数据结构 二维数组-->稀疏数组-->二维数组
稀疏数组基本概念: 稀疏数组应用场景: 当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组 处理方法: 1>记录数组一共有几行几列,有多少不 ...
随机推荐
- SSM(SpringMVC+Spring+MyBatis)三大框架使用Maven快速搭建整合(实现数据库数据到页面进行展示)
本文介绍使用SpringMVC+Spring+MyBatis三大框架使用Maven快速搭建一个demo,实现数据从数据库中查询返回到页面进行展示的过程. 技术选型:SpringMVC+Spring+M ...
- 2019/12/13学习内容摘要(Linux磁盘管理①)
一,查看磁盘或目录容量 1.命令df 查看已挂载磁盘的总容量,使用容量,剩余容量等,可以不加任何参数,默认以KB为单位 选项[-i] 表示查看inodes的使用情况 [-h] 表示用合适的单位显示 ...
- LinuxPXE+Kickstrart无人值守安装服务
要求:关闭VMware虚拟网络编辑器中自身的DHCP服务 主机名称 操作系统 IP地址 NoneOS Centos7 192.168.72.250 Custormer 无 1.挂在本地镜像源本配置 ...
- AXN文档
https://help.aliyun.com/document_detail/59705.html?spm=a2c4g.11186623.6.664.58a053afCvMM57 AXN api文档 ...
- [洛谷P1144][题解]最短路计数
这道题可以用各种算法踩掉,我选择的是SPFA. 因为题目要求计数,所以我们开一个ans数组表示数量. 分两种情况讨论: 一:dis_v>dis_u+1 最短路被更新了,可以直接ans_v=ans ...
- koa2 从入门到进阶之路 (六)
之前的文章我们介绍了一下 koa post提交数据及 koa-bodyparser中间件,本篇文章我们来看一下 koa-static静态资源中间件. 我们在之前的目录想引入外部的 js,css,img ...
- C++ 课程设计——电梯调度系统
这是我在本学期C++课程最后的课程设计报告,源代码将会上传到GitHub上. 一.背景 随着经济的不断发展,越来越多的摩天大楼拔地而起,而电梯作为高层建筑物种的运送人员货物的设备也越来越被广泛使用.电 ...
- Python进程池multiprocessing.Pool的用法
一.multiprocessing模块 multiprocessing模块提供了一个Process类来代表一个进程对象,multiprocessing模块像线程一样管理进程,这个是multiproce ...
- SVN 回滚提交的代码
有的时候,代码提交错了,我们可以通过SVN回滚到指定的版本,然后在提交回滚后的代码,即为撤销提交. 回滚代码 重新提交刚才回滚后的代码
- Linux安装docker-compose
下载:curl -L https://get.daocloud.io/docker/compose/releases/download/1.16.1/docker-compose-`uname -s` ...