lua之链表的实现
-- lua链表的实现
node = {}
list = node
--初始化,构建一个空表
function init()
list.data = --我将头结点的数据域存放链表的长度,以免浪费空间
list.next = nil
end
--向链表的尾部添加数据
function addRear(d)
node.next={}--建立一个节点,相当于malloc一个节点
node = node.next
node.next = nil
node.data = d
list.data = list.data + -- 长度加1
end
--向链表的头部添加数据
function addHead(d)
newNode = {}--建立一个节点,相当于malloc一个节点
newNode.data = d
newNode.next = list.next
list.next = newNode
list.data = list.data +
end
--第i个位置 插入数据d i>=1
function insert(i,d)
if i< then
print('插入位置不合法')
return
end
local j, k, l = i-, , list
-- 解决问题的核心是找到第j个位置
while k<j do
k=k+
l = l.next
if not l.next then break end
end
if k ~= j then
print('插入位置不合法')
return
end
--开始插入
newNode = {}
newNode.next = l.next
newNode.data = d
l.next = newNode
list.data = list.data +
end
--删除第i个位置的数据 i>=1,返回删除的数据的内容
function del(i)
if i< then
print('删除位置不合法')
return
end
local j, k ,l= i-, ,list
while k<j do
k=k+
l = l.next
if not l.next then
print('删除位置不合法')
return
end
end
d = l.next.data
t = l.next.next -- 保存删除节点之后的链表内容
l.next = nil --lua中让它等于nil就删除了
l.next = t
list.data = list.data - -- 链表长度减1
return d
end
--清除链表,操作完成后,链表还在,只不过为空
function clear()
if not list then -- 先判断链表是否还存在
print('链表不存在')
end
while true do
firstNode = list.next
if not firstNode then -- 表示链表成为空表了
break
end
t = firstNode.next -- 保存第一个节点之后的链表
list.next = nil -- 删除
list.next = t
end
list.data = -- 将长度置0
print('-- clear ok --')
end
-- 销毁链表
function destroy()
clear() -- 先清除链表
list = nil
end
--获取list中的第i个元素 i>=1
function getData(i)
if not list then
print('链表不存在')
return
end
if i< then
print('位置不合法')
return
end
local l = list.next -- l 指向第一个元素
local k =
while l do
l = l.next
k = k+
if k == i then
return l.data
end
end
print('位置不合法')
end
--获取链表的长度
function getLen()
if not list then
print('链表不存在')
return
end
return list.data
end
--打印链表的每一个元素
function display()
local l=list.next
while l do
print(l.data)
l = l.next
end
print('-- display ok --')
end
--主方法
function main()
init() -- 初始化链表
addRear()
addRear()
addRear()
addHead() --向头部添加
addRear() --向尾部添加
insert(,) --在第1个位置插入3
insert(,) -- 在第三个位置插入100
display() -- 打印链表的每一个元素
print('请输入要删除的位置:')
pos = io.read('*number')
ret = del(pos)
if not ret then
print('删除失败')
else
print('你删除的是:',ret,'\n删除后的链表内容为:')
end
-- 打印改变后内容
display()
--clear()
--display()
i =
print('第'..i..'个元素内容是:',getData(i))
print('链表的的长度为:',getLen())
destroy() -- 销毁链表
print ('---- main ok ----')
end
-- 程序的入口
main()
程序运行结果:
3
1
100
5
7
10
20
-- display ok --
请输入要删除的位置:
3
你删除的是: 100
删除后的链表内容为:
3
1
5
7
10
20
-- display ok --
第3个元素内容是: 5
链表的的长度为: 6
---- main ok ----
本人不是什么大牛,才学lua两天,如有错误之处,请谅解。
lua之链表的实现的更多相关文章
- lua单链表实现
List = {} --创建一个节点 function List.new(val) return {pnext = nil, value = val} end --往一个节点后添加一个节点 funct ...
- [lua]紫猫lua教程-命令宝典-L1-01-12. 临时补充2
1.lua的环境变量和函数 (1)_G表 (个人习惯遍历下_G 看看当前环境支持什么库 很多库不是默认就支持的 需要按照流程导入或者加载) 一个全局变量(非函数),内部储存有当前所有的全局函数和全局 ...
- chapter11_2 Lua链表与队列
链表 由于table是动态的实体,所以在Lua中实现链表是很方便的.每个节点以一个table来表示,一个“链表”只是节点table中的一个字段. 该字段包含了对其他table的引用.例如,要实现一个基 ...
- lua解析赋值类型代码的过程
我们来看看lua vm在解析下面源码并生成bytecode时的整个过程: foo = "bar" local a, b = "a", "b" ...
- 15分钟学会Lua
lua的很多语法跟matlab很像 最基本的赋值是一样的 循环和选择判断后面必须跟一个关键字:do和then ,, do ... end if - then - end table是lua的唯一一种数 ...
- lua解析脚本过程中的关键数据结构介绍
在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...
- lua中的string类型
在lua中用union TString来表示字符串类型 lobject.h: 其中结构体tsv中 reserved字段表示字符串是不是保留关键字,hash是其哈希值,len是其长度.我们在TStrin ...
- Lua 学习笔记(十)数据结构
在Lua中的table不是一种简单的数据结构,它可以作为其他数据结构的基础.其他语言提供的数据结构,如数组.记录.线性表.队列.集合等,在Lua中都可以通过table来表示.而且使用Lua实现这些数据 ...
- lua 类支持属性不能被修改
背景 lua是类是借助表的来实现的, 类被定义后, 在使用场景下, 不希望被修改.如果被修改, 则影响的类的原始定义, 影响所有使用类的地方. 例如: --- router.lua class fil ...
随机推荐
- bzoj 4521 电话号码
题目大意: 求$[L,R]$中,满足不同时存在4和8且有连续三个一样的个数 思路: 我为什么要记忆化搜索里带-1啊 我可真是个** 直接记忆化搜索记前两位是否有4,8以及是否满足连续 #include ...
- 关于eclipse部署项目后,在tomcat中的webapps文件夹下没有项目
转自:https://blog.csdn.net/yang505581644/article/details/78802316 一.发现问题 在eclipse中新建Dynamic Web Projec ...
- java笔记之IO1
File:文件和目录(文件夹)路径名的抽象表示形式 * 构造方法: * File(String pathname):根据一个路径得到File对象 * File(String parent, S ...
- bootstrap table 分页后,重新搜索的问题
前提: 自定义搜索且有分页功能,比如搜索产品名的功能. 现象:当搜索充气娃娃的时候返回100条记录,翻到第五页. 这时候搜索按摩棒,数据有200条,结果应该是第一页的记录,但是实际显示的还是第五页的 ...
- C# 多边形面积计算公式
最近在做地图相关面积计算显示工作,百度了很多关于多边形面积计算方面公式和代码,只能说贼费劲,最终完成了把结果展示下 原理:鞋带公式 定义:所述鞋带式或鞋带算法(也称为高斯的面积公式和测量员的式 ...
- bzoj 3206: [Apio2013]道路费用【最小生成树+并查集】
参考:http://hzwer.com/6888.html 把k条道路权值设为0,和其他边一起跑MST,然后把此时选中的其他边设为必选,在新图中加上必选变缩成k个点,把所有边重标号,枚举k跳边的选取情 ...
- 洛谷P3833 [SHOI2012]魔法树(树链剖分)
传送门 树剖板子…… 一个路径加和,线段树上打标记.一个子树询问,dfs的时候记录一下子树的区间就行 // luogu-judger-enable-o2 //minamoto #include< ...
- window 下拉取github项目失败 (Permission denied (publickey))
原因是github 帐号ssh 失效或者没有配置 1.找到gitcmd 并进入 2.在gitcmd 下切换到 安装git路劲\Git\usr\bin 3.提示在C:\Users\Administrat ...
- Ocelot(八)- Ocelot不支持的几个方面
不支持 Ocelot不支持的几个方面 Chunked Encoding - Ocelot将始终获取正文大小并返回Content-Length标头.很抱歉,如果这对您的用例不起作用! 转发主机标头 - ...
- VMware 12安装Mac OS X 10.11&解决上网的问题
近日想在Win10上安装Mac OS 玩玩,于是上网搜了相关资源,查看了相关经验分享,开始着手安装.系统很快成功安装,但最大问题是虚拟机中的Mac OS无法上网.费了很长时间,最终看到Ping通结果, ...