用Go编写一个Linktable的库

Ingram 2022-04-06 13:03:02

1. 定义LinkTable

//定义结点
 type Node struct {
    Next *Node
    data int
 }

//定义链表
type LinkTable struct {
    pHead *Node
    pTail *Node
    lenth int
}

2.LinkTable方法

2.1创建链表

// Create a LinkTable
func CreatLinkTable() *LinkTable {
    var pLinkTable *LinkTable = new(LinkTable)
    if pLinkTable == nil {
        return nil
    } 
    pLinkTable.pHead = nil
    pLinkTable.pTail = nil
    pLinkTable.lenth = 0
    return pLinkTable
}

2.2删除链表

//Delete a LinkTable
func DelLinkTable(pLinktable *LinkTable) int {
    if pLinktable == nil {
        return -1
    }
    for pLinktable.pHead != nil {
        var pNode *Node = pLinktable.pHead
        pLinktable.pHead = pNode.Next
        pLinktable.lenth--
    }
    pLinktable.pHead = nil
    pLinktable.pTail = nil
    pLinktable.lenth = 0
    return 0
}

2.3增加结点(尾插法)

//Add a LinkTableNode to LinkTable
func AddNode(pLinktable *LinkTable, pNode *Node) int {
    if pLinktable == nil || pNode == nil {
        return -1
    }
    pNode.Next = nil
    if pLinktable.pHead == nil {
        pLinktable.pHead = pNode
    }
    if pLinktable.pTail == nil {
        pLinktable.pTail = pNode
    } else {
        pLinktable.pTail.Next = pNode
        pLinktable.pTail = pNode
    }
    pLinktable.lenth++
    return 0
}

2.4删除结点

//Delete a LinkTableNode from LinkTable
func DelNode(pLinktable *LinkTable, pNode *Node) int {
    if pLinktable == nil || pNode == nil {
        return -1
    }
    if pLinktable.pHead == pNode {
        pLinktable.pHead = pLinktable.pHead.Next
        pLinktable.lenth--
        if pLinktable.lenth == 0 {
            pLinktable.pTail = nil
        }
        return 0
    }
    var qNode *Node = pLinktable.pHead
    for qNode != nil {
        if qNode.Next == pNode {
            qNode.Next = qNode.Next.Next
            pLinktable.lenth--
            if pLinktable.lenth == 0 {
                pLinktable.pTail = nil
            }
            return 0
        }
        qNode = qNode.Next
    }
    return -1
}

2.5查找结点

//Search a LinkTableNode from LinkTable
func SearchNode(pLinktable *LinkTable, pNode *Node) *Node {
    if pLinktable == nil || pNode == nil {
        return nil
    }
    var qNode *Node = pLinktable.pHead
    for qNode != nil {
        if qNode == pNode {
            return qNode
        }
        qNode = qNode.Next
    }
    return nil
}

2.6获得链表头结点

//get LinkTableHead
func GetLinkTableHead(pLinktable *LinkTable) *Node {
    if pLinktable == nil {
        return nil
    }
    return pLinktable.pHead
}

2.7获得给定结点的下一结点

//get next LinkTableNode
func GetNextLinkTableNode(pLinktable *LinkTable, pNode *Node) *Node {
    if pLinktable == nil || pNode == nil {
        return nil
    }
    var qNode *Node = pLinktable.pHead
    for qNode != nil {
        if qNode == pNode {
            return qNode.Next
        }
        qNode = qNode.Next
    }
    return nil
}

源码地址

作者098

...全文
88 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

571

社区成员

发帖
与我相关
我的任务
社区描述
软件工程教学新范式,强化专项技能训练+基于项目的学习PBL。Git仓库:https://gitee.com/mengning997/se
软件工程 高校
社区管理员
  • 码农孟宁
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧