数据结构之链表go言语实现
2016-11-09 21:57
579 查看
package main import ( "fmt" "os" ) type Node struct { val int pNode *Node } func create_list() (*Node) { var ( len int val int ) var pHead *Node pTmp:=new(Node) pTmp.pNode=nil pHead=pTmp if pHead==nil { fmt.Println("分配内存出错,程序退出") os.Exit(-1) } fmt.Println("请输入要生成链表节点个数:len=") fmt.Scanf("%d",&len) for i:=0;i<len;i++ { fmt.Printf("请输入第%d个节点的值:",i+1) fmt.Scanf("%d",&val) pNew:=new(Node) if pNew==nil { fmt.Println("分配内存失败,程序退出") os.Exit(-1) } pNew.val=val pNew.pNode=nil pTmp.pNode=pNew pTmp=pNew } return pHead } func traverse_list(pHead *Node) { p:=pHead.pNode if p==nil { return } for { fmt.Printf("%d ",p.val) p=p.pNode if p==nil{ break } } fmt.Println() } func isempty_list(pHead *Node) bool { if pHead.pNode==nil { return true } return false } func length_list(pHead *Node) int { var len int=0 p:=pHead.pNode for p!=nil { len++ p=p.pNode } return len } func sort_list(pHead *Node) { len:=length_list(pHead) pLeft:=pHead.pNode for i:=0;i<len-1;i++{ pRight:=pLeft.pNode for j:=i+1;j<len;j++{ if pLeft.val>pRight.val { tmp:=pLeft.val pLeft.val=pRight.val pRight.val=tmp } pRight=pRight.pNode } pLeft=pLeft.pNode } } func insert_list(pHead *Node,pos,val int) bool { p:=pHead var i int=0 for ;i<pos-1;i++{ p=p.pNode if p==nil { break } } if i>pos-1 || p==nil { return false } pNew:=new(Node) pNew.val=val if pNew==nil { fmt.Println("分配内存出错,程序退出") os.Exit(-1) } ptmp:=p.pNode p.pNode=pNew pNew.pNode=ptmp return true } func delete_list(pHead *Node,pos int)(bool,int) { p:=pHead var i int=0 for ;i<pos-1;i++{ p=p.pNode if p.pNode==nil { break } } if i>pos-1 || p.pNode==nil { return false,0 } reVal:=p.pNode.val p.pNode=p.pNode.pNode return true,reVal } func main() { pHead:=create_list() traverse_list(pHead) //if isempty_list(pHead) { // fmt.Println("链表为空!") //}else { // fmt.Println("链表不为空!") //} //fmt.Println("链表长度为:",length_list(pHead)) //sort_list(pHead) //insert_list(pHead,4,33) pos:=4 rebool,reval:=delete_list(pHead,pos) if rebool { fmt.Printf("删除第%d个节点成功,删除的节点值为:%d\n",pos,reval) }else { fmt.Printf("删除节点失败") } traverse_list(pHead) }
相关文章推荐
- 数据结构之数组go言语实现
- 数据结构之stack,queue的数组与链表实现
- 数据结构课程设计-----用C#实现双向链表
- 单链表数据存储结构(c语言实现)
- Java单链表顺序和链式实现(数据结构五)
- 数据结构之单向链表实现
- (4)数据结构——栈(链表)实现
- Java数据结构之双端链表原理与实现方法
- 数据结构(2)单链表 c++ 模板实现
- 数据结构 学习笔记之:静态链表--史上最简单的C语言实现——只为掌握概念——不清楚静态链表的鸟鸟们有福了!
- Java单链表顺序和链式实现(数据结构五)
- 【数据结构与算法】第三章 栈c实现,使用链表结构
- 数据结构之双向链表的实现
- 程序员面试宝典之数据结构基础---⑤单链表逆序的递归与非递归实现
- 数据结构(3)单循环链表 c++ 模板实现
- 数据结构课程设计-----用C#实现双向链表
- 状态管理对象器的实现,数据结构为链表
- 数据结构单项链表C++实现改变C版本
- redis 源代码之数据结构(sds,链表的实现)
- 数据结构实验1 链表 实现学生信息存储,功能 增删改查,实现 结构类型