手机版
你好,游客 登录 注册
背景:
阅读新闻

使用Lua实现链表的各种操作

[日期:2016-01-31] 来源:Linux社区  作者:thydamon [字体: ]

使用Lua实现链表的各种操作

#!/usr/local/bin/lua

--Lua 实现链表
node={}
list=node

--初始化,构建一个空表
function init()
 list.data=0
 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+1
end

--第i个位置插入数据d i>=1
function insert(i,d)
 if i<1 then
  print('插入的位置不合法')
  return
 end
 
 local j,k,l=i-1,0,list  --找到第i个位置
 while k~=j do
  k=k+1
  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+1
end
 
--打印链表的每一个元素
function display()
 local l=list.next
 while l do
  io.write(l.data.." ")
  l=l.next
 end
 print('\n-- display ok --')
end

--判断链表是否为空
function is_empty()
 return list.data==0
end

--删除第i个位置的数据 i>=1 返回删除数据的内容
function delete(i)
 if i<1 then
  print('删除位置不合法')
  return
 end
 
 local j,k,l=i-1,0,list
 while k~=j do
  k=k+1
  l=l.next
  if not l.next then break end
 end
 
 --开始删除
 d=l.next.data
 t=l.next.next
 l.next=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 destory()
 clear() --先清除链表
 list=nil
end

--获取第i个元素i>1的值
function getData(i)
 if not list then
  print('链表不存在')
  return
 end
 if i<1 then
  print('位置不合法')
  return
 end
 
 local l=list.next  --指向第一个元素
 local k=1
 while l do
  if k==i then
   return l.data
  end
  l=l.next
  k=k+1
 end
 
 print('位置不合法')
end
 
--获取链表的长度
function getLen()
 if not list then
  print('链表不存在')
  return
 end
 return list.data
end

--主方法
function main()
 init()
 addRear(5)
 addRear(7)
 addRear(10)
 addHead(1)
 addHead(2)
 insert(2,4)
 display()
 
 
 print('输入你要删除的元素的位置:')
 pos=io.read('*number')
 ret=delete(pos)
 if not ret then
  print('删除失败')
 else
  print('你要删除的元素是:'..ret)
 end
 print('删除后的链表的内容为:')
 display()
 
 print('输入你想要得到的元素的位置:')
 pos=io.read('*number')
 print('第'..pos..'个元素内容是:'..getData(pos))
 print('链表的长度为:'..getLen())
 
 destory() --销毁链表
 print('-- main end --')
end
 
--程序的入口
main()

Lua 语言 15 分钟快速入门 http://www.linuxidc.com/Linux/2013-06/86582.htm

Lua程序设计(第2版)中文 PDF http://www.linuxidc.com/Linux/2013-03/81833.htm

Lua程序设计(第二版)阅读笔记 http://www.linuxidc.com/Linux/2013-03/81834.htm

NetBSD 将支持用 Lua 脚本开发内核组件 http://www.linuxidc.com/Linux/2013-02/79527.htm

CentOS 编译安装 Lua LuaSocket http://www.linuxidc.com/Linux/2011-08/41105.htm

Programming In Lua 高清PDF中文版  http://www.linuxidc.com/Linux/2015-05/117362.htm

如何配置一套优雅的Lua开发环境  http://www.linuxidc.com/Linux/2015-10/124397.htm

Lua 的详细介绍请点这里
Lua 的下载地址请点这里

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-01/128038.htm

linux
相关资讯       Lua  Lua链表  链表 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款