使用go编写链表库(定义模块化接口)

qq_45237600 2022-04-07 00:43:18

定义链表库

定义链表库的通用接口,无需关心数据部分,只需完成链表最基本的功能。暴露给用户的功能有新建链表节点、新建链表、在链表中增加一个节点,删除一个节点。此外,链表的头尾节点指针和节点的下一个节点也提供给用户,方便用户结合数据部分进行查看与修改的操作。

1.定义链表节点和链表

//链表节点
type LinkNode struct {
    NextNode *LinkNode
    Data     interface{} //为了方便拓展数据类型
}

//定义链表
type LinkTable struct {
    HeadNode *LinkNode
    TailNode *LinkNode
    Length   uint
}

2.定义初始化的方法

//构造结点
func NewNode(data interface{}) *LinkNode {
    return &LinkNode{nil, data}
}

//构建一个空表
func NewLinkTable() *LinkTable {

    return &LinkTable{nil, nil, 0}
}

3.定义增删方法

//增
func (this *LinkTable) AddNode(p *LinkNode) bool {
    if this == nil {
        return false
    }
    //还是空表
    if this.HeadNode == nil {
        this.HeadNode = p
        this.TailNode = p
        this.Length = 1
        return true
    }
    this.TailNode.NextNode = p
    this.TailNode = p
    this.Length++
    return true
}

//删
func (this *LinkTable) DelNode(p *LinkNode) bool {
    if this == nil || this.HeadNode == nil {
        return false
    }
    var pre *LinkNode = this.HeadNode
    if pre == p {
        this.HeadNode = nil
        this.TailNode = nil
        this.Length--
        return true
    }
    cur := pre.NextNode
    for cur != nil {
        if cur == p {
            //找到了
            pre.NextNode = cur.NextNode
            this.Length--
            return true
        }
        pre = cur
        cur = cur.NextNode
    }
    return false

}

4.将编写好的文件打包
进入编写库文件代码的文件夹,终端输入go install,可见已经打包成功

img

5.编写测试用例
记得要引入自己的包


import (
    "fmt"
    "menu/software-engineering/util"
    "os"
)

func main() {
    table := util.NewLinkTable()
    node1 := util.NewNode(1)
    table.AddNode(node1)
    node2 := util.NewNode(2)
    table.AddNode(node2)

    for p := table.HeadNode; p != nil; p = p.NextNode {
        data := p.Data.(int)
        fmt.Println(data)
    }

}

img

测试成功

上传至gitee

img

img

上传成功,版本库地址:
https://gitee.com/zhou-pufan/software-engineering.git

作者: 599

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

571

社区成员

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

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