使用Go语言编写Link Table库

phantom_of_shadow 2022-04-06 18:12:04

使用Go语言编写一个Linktable的库并分享定义接口和设计一个程序库的心得体会,将代码上传至GitHub

代码参考Lab4

编写LinkTable

定义结点和链表

/*
 * Define LinkTable Node
 */
type LinkTableNode struct {
    pNext *LinkTableNode
}

/*
 * Define LinkTable
 */
type LinkTable struct {
    pHead     *LinkTableNode
    pTail     *LinkTableNode
    SumOfNode int
    mutex     sync.Mutex
}

定义LinkTable的创建与删除操作

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

/*
 * Delete a LinkTable
 */
func DeleteLinkTable(pLinkTable *LinkTable) int {
    if pLinkTable == nil {
        return FAILURE
    }
    for pLinkTable.pHead != nil {
        var p *LinkTableNode = pLinkTable.pHead
        pLinkTable.mutex.Lock()
        pLinkTable.pHead = p.pNext
        pLinkTable.SumOfNode--
        pLinkTable.mutex.Unlock()
    }
    pLinkTable.pHead = nil
    pLinkTable.pTail = nil
    pLinkTable.SumOfNode = 0
    return SUCCESS
}

定义LinkTable中结点的插入和删除操作

/*
 * Add a LinkTableNode to LinkTable
 */
func AddLinkTableNode(pLinkTable *LinkTable, pNode *LinkTableNode) int {
    if pLinkTable == nil || pNode == nil {
        return FAILURE
    }
    pNode.pNext = nil
    pLinkTable.mutex.Lock()
    if pLinkTable.pHead == nil {
        pLinkTable.pHead = pNode
    }
    if pLinkTable.pTail == nil {
        pLinkTable.pTail = pNode
    } else {
        pLinkTable.pTail.pNext = pNode
        pLinkTable.pTail = pNode
    }
    pLinkTable.SumOfNode++
    pLinkTable.mutex.Unlock()
    return SUCCESS
}

/*
 * Delete a LinkTableNode from LinkTable
 */
func DelLinkTableNode(pLinkTable *LinkTable, pNode *LinkTableNode) int {
    if pLinkTable == nil || pNode == nil {
        return FAILURE
    }
    pLinkTable.mutex.Lock()
    if pLinkTable.pHead == pNode {
        pLinkTable.pHead = pLinkTable.pHead.pNext
        pLinkTable.SumOfNode--
        if pLinkTable.SumOfNode == 0 {
            pLinkTable.pTail = nil
        }
        pLinkTable.mutex.Unlock()
        return SUCCESS
    }
    var pTempNode *LinkTableNode = pLinkTable.pHead
    for pTempNode != nil {
        if pTempNode.pNext == pNode {
            pTempNode.pNext = pTempNode.pNext.pNext
            pLinkTable.SumOfNode--
            if pLinkTable.SumOfNode == 0 {
                pLinkTable.pTail = nil
            }
            pLinkTable.mutex.Unlock()
            return SUCCESS
        }
        pTempNode = pTempNode.pNext
    }
    pLinkTable.mutex.Unlock()
    return FAILURE
}

定义LinkTable的基础查找操作

/*
 * get LinkTableHead
 */
func GetLinkTableHead(pLinkTable *LinkTable) *LinkTableNode {
    if pLinkTable == nil {
        fmt.Println("LinkTable is empty")
        return nil
    }
    return pLinkTable.pHead
}

/*
 * get next LinkTableNode
 */
func GetNextLinkTableNode(pLinkTable *LinkTable, pNode *LinkTableNode) *LinkTableNode {
    if pLinkTable == nil || pNode == nil {
        fmt.Println("Linktable is empty")
        return nil
    }
    var pTempNode *LinkTableNode = pLinkTable.pHead
    for pTempNode != nil {
        if pTempNode == pNode {
            return pTempNode.pNext
        }
        pTempNode = pTempNode.pNext
    }
    return nil
}

menu的命令修改下次一定,库的接口设计尽量与业务逻辑独立,从而提高程序的复用性

在GitHub上更新代码

代码地址

git add linktable.go
git commit -m "add basic link table interface"
git push

github

作者:406

...全文
152 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文提出了一种基于“空调-电动汽车”联合虚拟储能的海岛微电网优化调度方法,旨在解决海岛地区可再生能源消纳难与电力供应不稳定的问题。通过充分利用空调负荷的热惰性与电动汽车的灵活充放电能力,构建联合虚拟储能系统,等效替代物理储能装置,实现对风电、光伏等间歇性电源出力波动的平抑。研究建立了融合需求响应机制与多时间尺度调度框架的优化模型,并采用Matlab进行仿真验证。结果表明,该策略能够有效提升微电网对分布式能源的接纳能力,降低系统综合运行成本,增强供电可靠性与能源利用效率。; 适合人群:具备一定电力系统分析、优化建模及Matlab编程基础,从事微电网、综合能源系统、虚拟储能、需求响应等领域研究的科研人员与工程技术人员,特别适合研究生及以上学历的研究者。; 使用场景及目标:①应用于海岛、偏远孤岛等孤立微电网场景,提升可再生能源渗透率与系统韧性;②为高比例新能源接入的配电网提供低成本、高灵活性的虚拟储能解决方案;③实现空调与电动汽车等柔性负荷的协同优化,达成削峰填谷、降低能耗与运行成本的目标; 阅读建议:建议结合Matlab代码深入理解模型构建与求解过程,重点关注虚拟储能建模逻辑、温控负荷动态特性刻画、电动汽车充放电约束处理以及多时间尺度滚动优化的实现机制,可进一步拓展至碳交易、绿证激励等复合政策情景下的优化调度研究。

571

社区成员

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

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