歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

使用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