歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 使用Lua實現鏈表的各種操作

使用Lua實現鏈表的各種操作

日期:2017/3/1 9:18:51   编辑:Linux編程

使用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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved