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

来源:互联网 发布:手机c语言程序编写软件 编辑:程序博客网 时间:2024/04/30 13:05
#!/usr/local/bin/lua--Lua 实现链表node={}list=node--初始化,构建一个空表function init()list.data=0list.next=nilend--向链表的尾部添加数据function addRear(d)node.next={}  --建立一个节点,相当于malloc一个节点node=node.nextnode.next=nilnode.data=dlist.data=list.data+1end--向链表的头部添加数据function addHead(d)newNode={} --建立一个节点,相当于malloc一个节点newNode.data=dnewNode.next=list.nextlist.next=newNodelist.data=list.data+1end--第i个位置插入数据d i>=1function insert(i,d)if i<1 thenprint('插入的位置不合法')returnendlocal j,k,l=i-1,0,list  --找到第i个位置while k~=j dok=k+1l=l.nextif not l.next then break endend--if k~=j then print("插入位置不合法") return end--开始插入newNode={}newNode.next=l.nextnewNode.data=dl.next=newNodelist.data=list.data+1end--打印链表的每一个元素function display()local l=list.nextwhile l doio.write(l.data.." ")l=l.nextendprint('\n-- display ok --')end--判断链表是否为空function is_empty()return list.data==0end--删除第i个位置的数据 i>=1 返回删除数据的内容function delete(i)if i<1 thenprint('删除位置不合法')returnendlocal j,k,l=i-1,0,listwhile k~=j dok=k+1l=l.nextif not l.next then break endend--开始删除d=l.next.datat=l.next.nextl.next=nill.next=tlist.data=list.data-1return dend--清理链表,操作完成后,链表还在,只不过为空,相当刚开始的初始化状态function clear()if not list thenprint('链表不存在')endwhile true dofirstNode=list.nextif not firstNode then  --表示链表已为空表了breakendt=firstNode.nextlist.next=nillist.next=tendlist.data=0print('-- clear ok --')end--销毁链表function destory()clear() --先清除链表list=nilend--获取第i个元素i>1的值function getData(i)if not list thenprint('链表不存在')returnendif i<1 thenprint('位置不合法')returnendlocal l=list.next  --指向第一个元素local k=1while l doif k==i thenreturn l.dataendl=l.nextk=k+1endprint('位置不合法')end--获取链表的长度function getLen()if not list thenprint('链表不存在')returnendreturn list.dataend--主方法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 thenprint('删除失败')elseprint('你要删除的元素是:'..ret)endprint('删除后的链表的内容为:')display()print('输入你想要得到的元素的位置:')pos=io.read('*number')print('第'..pos..'个元素内容是:'..getData(pos))print('链表的长度为:'..getLen())destory() --销毁链表print('-- main end --')end--程序的入口main()

0 0
原创粉丝点击