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>记录数组一共有几行几列,有多少不 ...
随机推荐
- python 基础学习笔记(6)--函数(2)
...
- Struts2.0
流程详解: 配置详解: constant (常用常量配置) 使用Struts2 框架 ,先要导入Struts2 需要的jar 包 , 通过配置中央控制器 以及web.xml 来实现 Str ...
- Python语法速查: 15. 常用数据结构
返回目录 本篇索引 (1)array (2)bisect (3)deque (4)defaultdict (5)namedtuple (6)heapq (7)itertools (1)array ar ...
- Python通过pymysql连接数据库并进行查询和更新SQL方法封装
1.通过pymysql连接数据库并进行数据库操作2.查询数据3.更新修改SQL方法封装 import pymysql.cursors import json class OperationMysql: ...
- 电位器控制两个 LED 灯交替闪烁
电路图: 布局:
- dom元素的tabindex属性介绍及在vue项目中的应用
dom元素的tabindex属性介绍及在vue项目中的应用 tabindex属性作用 让普通dom元素变为可聚焦的元素 让普通dom元素可以参与顺序键盘导航(通常使用Tab键,因此得名). tabin ...
- P3747 [六省联考2017]相逢是问候
题意 如果对一个数操作\(k\)次,那么这个数会变成\(c^{c^{...^{a_i}}}\),其中\(c\)有\(k\)个. 根据P4139 上帝与集合的正确用法这道题,我们可以知道一个数不断变为自 ...
- 记录自己的一次pjax性能优化
什么是pjax? pjax = ajax + pushState 通过ajax让页面进行局部刷新,然后通过pushstate让url发生改变,再让pushState,让页面产生一个回退的记录,从而让页 ...
- 浏览器及Windows常用快捷键汇总
浏览器常用快捷键: F5 刷新 Ctrl+N 打开新窗口 Ctrl+T 打开新标签 Ctrl + O 打开浏览器的时候打开文件 Ctrl+Shift+N 隐身模式打开窗口 F2 F3 切换 Ct ...
- 图解Numpy的tile函数
Numpy的tile(A, reps)函数,就是将原矩阵横向.纵向地复制.tile是瓷砖的意思,顾名思义,这个函数就是把数组像瓷砖一样铺展开来. 举个例子,原矩阵: 横向铺展: 纵向铺展: 横向铺 ...