静态链表GO语言实现
2016-12-13 22:06
316 查看
package main import ( "fmt" "log" "os" ) //静态链表节点 type Node struct{ data string cursor 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=0 list[size-1].cursor=0 return 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].cursor list[maxSize-1].cursor=0 i:=list[0].cursor list[0].cursor=j if 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].cursor for j>0 { j=list[j].cursor i++ } 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].cursor j:=1 for 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:=0 i:=list[maxSize-1].cursor for 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].cursor var j int for i>0 { j=list[i].cursor if 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].cursor var j int for i>0 { j=list[i].cursor if list[i].data==data { return list[j].data } i=j } return "" } //分配节点 func malloc(list []Node) int { i:=list[0].cursor if i==0 { os.Exit(0) } list[0].cursor=list[i].cursor return i } //回收节点 func free(list []Node,index int){ list[index].cursor=list[0].cursor list[0].cursor=index } //插入节点 func insertLIst(list []Node,index int,data string) { if index<1 || index>length(list) { os.Exit(0) } i:=list[maxSize-1].cursor j:=1 for i>0 && j<index-1 { j++ i=list[i].cursor } tmp:=list[i].cursor cur:=malloc(list) list[cur].data=data list[cur].cursor=tmp list[i].cursor=cur } //删除节点 func deleteList(list []Node,index int)string{ if index<1 || index>length(list) { return "删除参数错误" } i:=list[maxSize-1].cursor j:=1 for i>0 && j<index-1 { j++ i=list[i].cursor } tmp:=list[i].cursor list[i].cursor=list[tmp].cursor val:=list[tmp].data free(list,tmp) return val } //遍历链表 func traveList(list []Node){ if list[maxSize-1].cursor==0 { return } i:=list[maxSize-1].cursor j:=1 for i>0 { fmt.Printf("第%d个节点为:%s\n",j,list[i].data) i=list[i].cursor j++ } } func main() { var list []Node list=initList(maxSize) list[1].data="A" list[9].cursor=1 list[2].data="C" list[2].cursor=0 list[0].cursor=3 //traverse(list) insertLIst(list,2,"B") traveList(list) reval:=deleteList(list,1) fmt.Println("删除的节点为:",reval) traveList(list) }
相关文章推荐
- [C/C++]反转链表
- C#数据结构之顺序表(SeqList)实例详解
- C#实现基于链表的内存记事本实例
- Lua教程(七):数据结构详解
- C#模拟链表数据结构的实例解析
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法