zoukankan      html  css  js  c++  java
  • Lua 学习笔记(十)数据结构

         在Lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础。其他语言提供的数据结构,如数组、记录、线性表、队列、集合等,在Lua中都可以通过table来表示。而且使用Lua实现这些数据结构的效率高。

     
    一、数组
         
         在Lua中数组没有固定的大小,可以根据需要增加长度。当初始化数组时,也就间接的定义了它的大小。
     
     
    二、矩阵与多维数组
     
         在Lua中,有两种方式来表示矩阵,一种是使用一个“数组的数组”,也就是数组中的元素是数组。另一种方式就是合并索引的方式,合并索引也有两种方式,加入索引分隔符和计算合值的方式。
     
     
         合并索引方式,一个table存储所有的值。
         1、计算合值,( idx - 1 )*M + idy 的方式算出每次索引的值
         2、加入分隔符,N..S..M 使用字符串连接的方式实现唯一key
     
     
     
     
    三、链表
     
         由于Lua中table是动态的实体,所以在Lua中实现链表是很方便的。每一个链表结点以table来表示,结点包含两个值next和value,注意尾结点的next是nil。
     
     
    四、双向队列
         
         Lua中队列的实现有一种比较简单的实现方法就是使用table库函数insert和remove。这两个函数可以在一个数组的任意位置插入和删除元素,并且根据操作要求移动后续的元素。不过对于较大的结构,移动的开销是很大的。一种更高效的实现是使用两个索引,分别用于首尾的两个元素,及双向队列:
     
    --双向队列的实现
    
    DoubleQueue = {}
    
    function DoubleQueue.new()
         local Queue = { first = 0, last = -1 }
         function Queue.pushFirst( queue,value )
              local first = queue.first -1
              queue.first = first
              queue[ first ] = value
         end
    
         function Queue.popFirst( queue )
              local first = queue.first
              if first > queue.last then error(" queue is empty! ") end
              local value = queue[first]
              queue[first] = nil
              queue.first = first +1
              return value
         end
    
         function Queue.pushLast( queue,value )
              local last = queue.last +1
              queue.last = last
              queue[last] = value
         end
    
         function Queue.popLast( queue )
              local last = queue.last
              if last < queue.first then error( " queue is empty! " ) end
              local value = queue[last]
              queue[last] = nil
              queue.last = last -1
              return value
         end
    
         function Queue.len( queue )
              return queue.last - queue.first +1
         end
         return Queue
    end

  • 相关阅读:
    MaskRCNN模型解读
    Centos7下WebLogic安装部署
    CentOS 7 安装 JAVA环境(JDK 1.8)
    Linux下如何查看tomcat是否安装、启动、文件路径、进程ID
    Nacos enable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
    多线程系列(三)之线程池
    多线程系列(二)之Thread类
    多线程系列(一)之多线程基础
    Vue2/Vue3 自定义组件库
    EF Core使用单独的项目管理迁移
  • 原文地址:https://www.cnblogs.com/Richard-Core/p/4380734.html
Copyright © 2011-2022 走看看