注:这是一个自己的探索性的研究,自己对数据结构这门课本身掌握的不是非常扎实,纰漏之处敬请评论指正:
最近写论文要用到交叉口元胞矩阵的建模,需求是这样的。给定矩阵的x,y坐标,求该坐标上的元胞网格。
共有几种运算。
1 判断矩阵(x,y)处 有没有元胞
2 获取(x,y)处的矩阵元素
3 移动元素在矩阵中的位置,从(xO,yO)移动到(xD,yD)
4 遍历矩阵中的元素并且进行处理
个人觉得十字链表太恶心,添加删除节点,内部的数据如指针等都要自己维护,烦得很。三元组的三个域也很有意思(x,y,你想要存储的数据),多个三元组本身还有一个存储的问题,当然最简单的就是线形存贮。利用三元素数组进行矩阵记录,本身又引入了三元组数组的管理问题。二维数组的方式简单直观,二维数组存贮稀疏矩阵空间浪费严重。这里,我是使用哈希表做矩阵的存贮结构。
插播个广告:
个人认为数据结构这门课,不管是什么语言实现,引入新的数据结构都使用最原始的数据类型如int char 进行重建,各种数据结构类型之间并没有很好相互利用,有点每次都从头开始的意思。而且不鼓励思考,直接给出实现方法的内容安排,也是容易让人认为这种数据结构的实现就书本上的几种方法。这不利于我们工程研究中设计出更好的更快速的数据结构。换句话说,这门课没有给它的学习者留下想象和提高的空间,直接给出答案,缺乏对学习者自身的思考创新的鼓励。
利用哈希表存贮矩阵好处简直一大堆,例如你不需要考虑你要存贮的矩阵是不是稀疏,分贝对矩阵采用不同的存储方式,哈希矩阵足够节省空间了(浪费的空间数就是哈希表为了解决冲突引入的额外的的空间数),如果你是完美主义者,喜欢要更好更节省空间的矩阵存储方法,那么恭喜你,你可以不用思考如何存贮矩阵了,直接思考如何构造更高效的哈希函数即可,说不定还能在前人的基础上提高那么几个百分点,这很难,按照现有的理论已经是或者是接近存储空间最优了。个人认为:哈希表使用了一种很好的思想,就是将如何找到 最优间节省的存贮结构 这样一个问题转变为如何找到一个高效的哈希函数,提取了思考的重点,缩小了思考的范围,将实现与设计的分离,降低了复杂