数据结构之链表go言语实现

来源:互联网 发布:手机淘宝怎样删除好评 编辑:程序博客网 时间:2024/05/01 08:00
package mainimport ("fmt""os")type Node struct {val intpNode *Node}func create_list() (*Node) {var (len intval int)var pHead *NodepTmp:=new(Node)pTmp.pNode=nilpHead=pTmpif 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=valpNew.pNode=nilpTmp.pNode=pNewpTmp=pNew}return pHead}func traverse_list(pHead *Node) {p:=pHead.pNodeif p==nil {return}for {fmt.Printf("%d ",p.val)p=p.pNodeif 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=0p:=pHead.pNodefor p!=nil {len++p=p.pNode}return len}func sort_list(pHead *Node) {len:=length_list(pHead)pLeft:=pHead.pNodefor i:=0;i<len-1;i++{pRight:=pLeft.pNodefor j:=i+1;j<len;j++{if pLeft.val>pRight.val {tmp:=pLeft.valpLeft.val=pRight.valpRight.val=tmp}pRight=pRight.pNode}pLeft=pLeft.pNode}}func insert_list(pHead *Node,pos,val int) bool {p:=pHeadvar i int=0for  ;i<pos-1;i++{p=p.pNodeif p==nil {break}}if i>pos-1 || p==nil {return false}pNew:=new(Node)pNew.val=valif pNew==nil {fmt.Println("分配内存出错,程序退出")os.Exit(-1)}ptmp:=p.pNodep.pNode=pNewpNew.pNode=ptmpreturn true}func delete_list(pHead *Node,pos int)(bool,int) {p:=pHeadvar i int=0for  ;i<pos-1;i++{p=p.pNodeif p.pNode==nil {break}}if i>pos-1 || p.pNode==nil {return false,0}reVal:=p.pNode.valp.pNode=p.pNode.pNodereturn 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:=4rebool,reval:=delete_list(pHead,pos)if rebool {fmt.Printf("删除第%d个节点成功,删除的节点值为:%d\n",pos,reval)}else {fmt.Printf("删除节点失败")}traverse_list(pHead)}

0 0
原创粉丝点击