静态链表GO语言实现

来源:互联网 发布:淘客微博群发软件 编辑:程序博客网 时间:2024/05/29 18:39
package mainimport ("fmt""log""os")//静态链表节点type Node struct{data stringcursor int}const maxSize int=10//初始化链表func initList(size int)([]Node){if size<3 {log.Fatal("size参数错误")return nil}list:=make([]Node,size)for i:=0;i<size-2;i++ {list[i].cursor=i+1}list[size-2].cursor=0list[size-1].cursor=0return list}//显示链表结构func traverse(list []Node){for _,v:=range list {fmt.Printf("%5d",v.cursor)}fmt.Println()for _,v:=range list {fmt.Printf("%5s",v.data)}fmt.Println()for i,_:=range list {fmt.Printf("%5d",i)}fmt.Println()}//回收链表到备用链表func destroyList(list []Node){if list[maxSize-1].cursor==0 {return}j:=list[maxSize-1].cursorlist[maxSize-1].cursor=0i:=list[0].cursorlist[0].cursor=jif j>0 {j=list[j].cursor}list[j].cursor=i}//判断是否为空func isempty(list []Node) bool {if list[maxSize-1].cursor==0 {return true}return false}//链表长度func length(list []Node) int {i,j:=0,list[maxSize-1].cursorfor j>0 {j=list[j].cursori++}return i}//获取指定位置的节点数据func getElement(list []Node,index int)string {if index<1 || index>maxSize-2 {log.Fatal("index out of range")return ""}i:=list[maxSize-1].cursorj:=1for i>0 && j<index {j++i=list[i].cursor}if j!=index {return ""}return list[i].data}//获取数据元素的位置func locateElem(list []Node,data string) int {locate:=0i:=list[maxSize-1].cursorfor i>0 {locate++if list[i].data==data {return locate}i=list[i].cursor}return locate}//获取元素的前驱节点func priorElem(list []Node,data string) string {if isempty(list){return ""}i:=list[maxSize-1].cursorvar j intfor i>0 {j=list[i].cursorif list[j].data==data{return list[i].data}i=j}return ""}//获取元素的后驱节点func nextElem(list []Node,data string) string {if isempty(list) {return ""}i:=list[maxSize-1].cursorvar j intfor i>0 {j=list[i].cursorif list[i].data==data {return list[j].data}i=j}return ""}//分配节点func malloc(list []Node) int {i:=list[0].cursorif i==0 {os.Exit(0)}list[0].cursor=list[i].cursorreturn i}//回收节点func free(list []Node,index int){list[index].cursor=list[0].cursorlist[0].cursor=index}//插入节点func insertLIst(list []Node,index int,data string) {if index<1 || index>length(list) {os.Exit(0)}i:=list[maxSize-1].cursorj:=1for i>0 && j<index-1 {                j++i=list[i].cursor}tmp:=list[i].cursorcur:=malloc(list)list[cur].data=datalist[cur].cursor=tmplist[i].cursor=cur}//删除节点func deleteList(list []Node,index int)string{if index<1 || index>length(list) {return "删除参数错误"}i:=list[maxSize-1].cursorj:=1for i>0 && j<index-1 {j++i=list[i].cursor}tmp:=list[i].cursorlist[i].cursor=list[tmp].cursorval:=list[tmp].datafree(list,tmp)return val}//遍历链表func traveList(list []Node){if list[maxSize-1].cursor==0 {return}i:=list[maxSize-1].cursorj:=1for i>0 {fmt.Printf("第%d个节点为:%s\n",j,list[i].data)i=list[i].cursorj++}}func main() {var list []Nodelist=initList(maxSize)list[1].data="A"list[9].cursor=1list[2].data="C"list[2].cursor=0list[0].cursor=3//traverse(list)        insertLIst(list,2,"B")traveList(list)reval:=deleteList(list,1)fmt.Println("删除的节点为:",reval)traveList(list)}

0 0