多种语言实现数据结构之稀疏数组和队列
前言 一部分有工作经验的老司机对数据结构是很熟悉了,而一部分刚参加工作或者刚入行的人对数据结构是略懂一二甚至是感到陌生,希望本篇文章可以让老司机更熟悉数据结构的实现,不懂数据结构的小白对数据结构的实现有一定的了解。 本系列文章使用多种语言实现常用的数据结构,包括目前使用最多的 Java ,21 世纪兴起的 Go ,前端领域的 JavaScript ,目的是尽可能的让更多的人能够看的懂、看的明白。整体上采用文字、图和代码的方式进行介绍,代码默认使用 Go 语言版本,其它语言请参考完整的源代码。 本篇为多种语言实现数据结构的第一节。 稀疏数组 各种语言实现代码: Go Java JavaScript 默认使用 Go 语言实现。 介绍 在二维数组中,如果值为 0 的元素数目远远大于非 0 元素的数目,并且非 0 元素的分布没有规律,则该数组被称为稀疏数组。如果非 0 元素数目占大多数,则称该数组为稠密数组。数组的稠密度指的是非零元素的总数比上数组所有元素的总数。 下图是一个 0 值远大于非 0 值的二维数组 稀疏数组可以看做是一个压缩的数组,稀疏数组的好处有: 原数组中存在大量的无效数据,占据了大量的存储空间,真正有用的数据却少之又少 压缩存储可以节省存储空间以避免资源的不必要的浪费,在数据序列化到磁盘时,压缩存储可以提高 IO 效率 采用稀疏数组的存储方式为第一行存储原始数据总行数