您的位置:首页 > 理论基础 > 数据结构算法

数据结构之链表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 数据结构