美文网首页
Lua学习笔记(7)——数据结构

Lua学习笔记(7)——数据结构

作者: 嘿小药罐 | 来源:发表于2017-03-17 16:48 被阅读139次

    数组

    1.使用整数来索引table即可在Lua中实现数组。因此数组没有一个固定大小。

    初始化数组a后,间接定义了它的大小,因为任何对字段1~1000以外的访问都会返回一个nil,而不是0

    2.然而在Lua中,习惯以1作为数组的其实索引,因为Lua库和长度操作符都遵循这个约定。

    通过table构造式定义数组

    矩阵与多维数组

    1.Lua中有两种方法表示矩阵,第一种是使用一个数组的数组,也就是嵌套table;第二种就是将两个索引合并为一个索引,即第一个索引乘以一个适当的常量(变为一维数组)。

    table嵌套实现一个n*m的矩阵 用索引的方式创建一个n*m的矩阵

    2.特殊矩阵,例如稀疏矩阵,这种矩阵中的大多数元素为0或者nil,此时无法使用长度操作符。一般使用pairs且值遍历那些非nil的元素。使用pairs的迭代并不保证会按递增的次序来访问元素。如果需要保证次序,那么就需要链表了。

    将矩阵的一行与一个常量相乘

    链表

    1.table实现链表是很方便的。每个节点以一个table来表示,一个“链接”只是一个节点table中的一个字段,该字段包含了对其他table的引用。实现一个基础的列表,其中的每个加点具有next和value两个字段,步骤如下:

    先创建一个用作列表头的节点变量 在表头插入一个元素,元素值为v 遍历此列表

    队列与双向队列

    1.实现队列的一种简单方法是使用table库中insert和remove函数,用于在一个数组的任意位置插入或删除元素,并根据操作要求移动后续元素(移动的开销大)。一种更高效的实现是使用两个索引,分别用于首尾的两个元素。

    队列 在队列头插入元素 在队列尾插入元素 删除队列头的元素 删除队列尾的元素

    集合与无序组(bag)

    1.表示集合,就是集合元素作为索引放入一个table中。那么对于任意值都无须搜索table,只需用该值来索引table并查看结果是否为nil。

    初始化一个集合

    2.包,有时也称为多重集合(Multiset),是每个元素可以出现多次的集合。包的表示类似于集合,只不过包需要将一个计数器与table的key关联。

    要插入一个元素,需要递增其计数器 若要删除一个元素,需要递减其计数器,当计数器存在或大于0时,才保留它

    字符串缓冲

    典型的逐行读取一个文件 使用concat的逐行读取一个文件(减少性能开销)

    P102

    相关文章

      网友评论

          本文标题:Lua学习笔记(7)——数据结构

          本文链接:https://www.haomeiwen.com/subject/kowenttx.html