用Go编写LinkTable库

lyzccccccc 2022-04-07 13:38:10

1.定义节点与LinkTable

type Node struct {
    data  int            //数据
    pNext *Node //指向下一节点指针
}
type LinkTable struct {
    pHead   *Node //头
    pTail   *Node //尾
    NodeNum int            //数量
}

2.创建LinkTable

func CreateLinkTable() *LinkTable {
    var pLinkTable *LinkTable = new(LinkTable)
    if pLinkTable == nil {
        return nil
    }
    pLinkTable.pHead = nil
    pLinkTable.pTail = nil
    pLinkTable.NodeNum = 0
    return pLinkTable
}

3.添加节点

func AddNodeInLinkTable(pLinkTable *LinkTable, pNode *Node) int {
    if pLinkTable == nil || pNode == nil {
        return -1
    }
    //pLinkTable.mutex.Lock()
    if pLinkTable.pHead == nil && pLinkTable.pTail == nil {
        pLinkTable.pHead = pNode
        pLinkTable.pTail = pNode
        pLinkTable.pTail.pNext = nil
        pLinkTable.NodeNum = 1
    } else {
        pLinkTable.pTail.pNext = pNode
        pLinkTable.pTail = pNode
        pLinkTable.pTail.pNext = nil
        pLinkTable.NodeNum++
    }
    //pLinkTable.mutex.Unlock()
    return 1
}

4.查询节点

func SearchNodeInLinkTable(pLinkTable *LinkTable, pNode *Node) *Node {
    if pLinkTable == nil {
        return nil
    }
    var pNodeTemp *Node = pLinkTable.pHead
    for pNodeTemp != nil {
        pNodeTemp = pNode.pNext
        if pNodeTemp == pNode {
            return pNodeTemp
        }
    }
    return nil
}

5. 返回头节点

func getHead(pLinkTable *LinkTable) *Node {
    if pLinkTable == nil {
        fmt.Println("LinkTable is empty")
        return nil
    }
    return pLinkTable.pHead
}

6.获取节点的next

func getNexNode(pLinkTable *LinkTable, pNode *Node) *Node {
    if pLinkTable == nil || pNode == nil {
        fmt.Println("Linktable is empty")
        return nil
    }
    var pNodeTemp *Node = pLinkTable.pHead
    for pNodeTemp != nil {
        if pNodeTemp == pNode {
            return pNodeTemp.pNext
        }
        pNodeTemp = pNodeTemp.pNext
    }
    return nil
}

7.删除

func DeleteLinkTable(pLinkTable *LinkTable) int {
    if pLinkTable == nil {
        return -1
    }
    for pLinkTable.pHead != nil {
        var p *Node = pLinkTable.pHead
        //pLinkTable.mutex.Lock()
        pLinkTable.pHead = p.pNext
        pLinkTable.NodeNum--
        //pLinkTable.mutex.Unlock()

    }
    pLinkTable.pHead = nil
    pLinkTable.pTail = nil
    pLinkTable.NodeNum = 0
    return 0
}

8.上传至gitee仓库

img

仓库地址

作者:289

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

571

社区成员

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

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