高级软件工程:go编写Linketable库

Fox_Hunter123 2022-07-03 09:30:25

该实验通过go编写一个LinkeTable的库并发布到gitee仓库

代码如下:

package linktable

import (
	"fmt"
	"sync"
)

const SUCCESS = 0
const FAILURE = -1

type LinkTableNode struct {
	pNext *LinkTableNode
}

/*
 * 链表定义
 */
type LinkTable struct {
	pHead     *LinkTableNode
	pTail     *LinkTableNode
	SumOfNode int
	mutex     sync.Mutex
}
/*
 * 创建一个链表
 */
func CreateLinkTable() *LinkTable {
	var pLinkTable *LinkTable = new(LinkTable)
	if pLinkTable == nil {
		return nil
	}
	pLinkTable.pHead = nil
	pLinkTable.pTail = nil
	pLinkTable.SumOfNode = 0
	return pLinkTable
}

/*
 * 删除一个链表
 */
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
}

/*
 * 添加一个·链表节点
 */
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
}

/*
 * 删除一个链表几点
 */
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
}

/*
 * 获取链表头部节点
 */
func GetLinkTableHead(pLinkTable *LinkTable) *LinkTableNode {
	if pLinkTable == nil {
		fmt.Println("LinkTable is empty")
		return nil
	}
	return pLinkTable.pHead
}

/*
 * 获得下一个链表节点
 */
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
}

发布到git仓库

 

 仓库链接:https://gitee.com/lr19990903/lin-k

实验总结与心得体会:通过使用go语言编写了一个链表库LinkTable,我对定义接口以及设计一个程序库有了新的理解:定义接口或者一个程序库可以使我们的日常开发解耦,当我们要使用库的功能时直接传入数据调用库函数即可,同时,当软件系统结构发生变化时,修改代码不再需要“牵一发而动全身”,只需要修改业务相关代码即可,设计程序库(造轮子)是软件工程规范的一次良好实践。

姓名:罗锐          学号后三位:345

...全文
113 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文提出了一种基于快速稀疏辅助信号分解与非凸增强技术的轴承故障诊断方法,并提供了完整的Matlab代码实现。该方法旨在从复杂的机械设备振动信号中高效、准确地提取故障特征,通过优化信号分解过程克服传统方法在噪声干扰下敏感、分辨率不足的问题,结合非凸优化策略增强微弱故障信号的辨识能力,从而提升早期故障诊断的准确性与鲁棒性。研究涵盖了算法原理、模型构建、仿真验证及结果分析,展示了其在旋转机械状态监测中的实际应用价值。; 适合人群:具备一定信号处理基础和Matlab编程能力,从事机械故障诊断、状态监测、智能运维等相关领域的科研人员及工程技术人员,尤其适合研究生和从事相关项目研发的工程师。; 使用场景及目标:①应用于旋转机械(如电机、风机、齿轮箱)的轴承早期故障检测;②用于复杂噪声环境下微弱故障信号的提取与增强;③为开发高精度智能诊断系统提供算法支持和技术参考;④辅助完成科研论文复现、毕业课题或工业项目开发。; 阅读建议:此资源以算法实现为核心,强调理论与实践结合,建议读者在学习过程中同步运行Matlab代码,深入理解信号分解与优化增强的每一步处理逻辑,并尝试在不同数据集上进行测试与调参,以掌握算法的适应性与优化技巧。

571

社区成员

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

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