使用go编写Linktable库并同步到gitee

auisuiduifui 2022-07-01 10:13:38

内容:使用Go编写了一个Linktable库,并同步到gitee。

学习了使用go语言设计和编写接口。

体会了面向接口编程的意义。

一、编写代码

1、定义链表结点和链表:

package main
 
import "fmt"

//结点及双链表数据结构
type LinkNode struct {
	next *LinkNode	//下一个结点
	prev *LinkNode  //上一个结点
	data int  //结点数据
 }
 
type LinkTable struct {
	Head *LinkNode //链表头部,不放数据
	Tail *LinkNode //链表尾部
	len int  //链表长度
}

2、创建和删除:

//创建链表
func CreatTable() *LinkTable {
	var newLinkTable *LinkTable = new(LinkTable)
	if newLinkTable == nil {
		return nil
	} 
	newLinkTable.Head = nil
	newLinkTable.Tail = nil
	newLinkTable.len = 0
	return newLinkTable
}
//删除链表
func DeleteTable(pLinktable *LinkTable) int {
	if pLinktable == nil {
		return -1
	}
	pLinktable.Head = nil
	pLinktable.Tail = nil
	pLinktable.len = 0
	return 0
}

3、get函数们:

//获取头结点
func GetHead(pLinktable *LinkTable) *Node {
	if pLinktable == nil {
		return nil
	}
	return pLinktable.Head
}
//获取尾结点
func GetTail(pLinktable *LinkTable) *Node {
	if pLinktable == nil {
		return nil
	}
	return pLinktable.Tail
}
//获取双链表长度
func GetLen(pLinktable *LinkTable) int {
	if pLinktable == nil {
		return 0
	}
	return pLinktable.len
}

4、插入新结点(头插和尾插)

//头插
func AddNode(pLinktable *LinkTable, pNode *LinkNode) int {
	if pLinktable == nil || pNode == nil {
		return -1
	}
	if pLinktable.Head == nil {
		pLinktable.Head = pNode
		pLinktable.Tail = pNode
		pNode.next = nil
		pNode.prev = nil
	}else {
		pLinktable.Head.prev = pNode
		pNode.next = pLinktable.Head
		pLinktable.Head = pNode
	}
	pLinktable.len++
	return 0
}
//尾插
func PushBack(pLinktable *LinkTable, pNode *LinkNode) int {
	if pLinktable == nil || pNode == nil {
		return -1
	}
	if pLinktable.Head == nil {
		pLinktable.Head = pNode
		pLinktable.Tail = pNode
		pNode.next = nil
		pNode.prev = nil
	}else {
		pLinktable.Tail.next = pNode
		pNode.prev = pLinktable.Tail
		pLinktable.Tail = pNode
	}
	pLinktable.len++
	return 0
}

5、删除与查找

//删除
func DelNode(pLinktable *LinkTable, pNode *LinkNode) int {
	if pLinktable == nil || pNode == nil {
		return -1
	}
	if pLinktable.Head == pNode {
		pLinktable.Head = pLinktable.pHead.next
		pLinktable.len--
		if pLinktable.Head == nil {
			pLinktable.Tail = nil
		}
		return 0
	}
	var q *LinkNode = pLinktable.Head
	for q != nil {
		if q.next == pNode {
			q.next = q.next.next
			q = q.next.prev
			pLinktable.len--
			if pLinktable.len == 0 {
				pLinktable.Tail = nil
			}
			return 0
		}
		q = q.next
	}
	return -1
}
//查找
func SearchNode(pLinktable *LinkTable, pNode *LinkNode) bool {
	if pLinktable == nil || pNode == nil {
		return false
	}
	var q *Node = pLinktable.Head
	for q != nil {
		if q == pNode {
			return true
		}
		q = q.next
	}
	return false
}

二、把更新同步推送到gitee:
 

 

学号:260

...全文
125 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文针对离网光伏直流微网中存在的功率供需失衡问题,提出了一种基于光伏最大功率点跟踪(MPPT)与锂离子储能系统双向削峰填谷协同控制的解决方案,并通过Simulink仿真平台进行了系统建模与验证。研究聚焦于间歇性光伏出力条件下48V直流母线电压的稳定控制,构建了包含光伏阵列、Boost DC-DC变换器、负载、双向DC-DC变换器及锂离子电池在内的完整系统架构。通过整合MPPT算法实现光伏出力的最大化捕获,同时设计储能系统的双向充放电闭环调控策略,在光照充足时储存多余电能,在光照不足或负载高峰时释放电能,从而实现“削峰填谷”,有效平衡系统功率,维持直流母线电压稳定。研究还融合了能量管理策略与电池充放电控制逻辑,提升了微网系统的能量自给率、运行稳定性及对复杂工况的适应能力。; 适合人群:具备电力电子、新能源系统、自动化或电气工程等相关专业背景,从事微电网、分布式能源系统、储能控制、光伏系统集成等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于离网型直流微网能量管理系统的设计与仿真验证;②为光伏-储能协同控制策略的研究与优化提供理论依据和技术参考;③实现直流母线电压的精确稳定控制,提升储能系统利用效率,增强系统在光照波动和负载变化等复杂工况下的可靠性和鲁棒性。; 阅读建议:建议结合提供的Simulink仿真模型进行实践操作,重点关注MPPT算法(如扰动观察法或增量电导法)与储能系统充放电控制逻辑(如基于电压阈值或功率预测的充放电策略)之间的协同机制,深入理解能量管理策略的实现流程,并可通过修改光照强度、负载大小等参数,扩展研究不同运行场景下的系统性能表现。

571

社区成员

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

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