go实现LinkTable库

qq_44698491 2022-04-27 19:35:47

1.定义链表节点和链表结构

 

//定义链表结点
type LinkNode struct {
	data interface{}
	next *LinkNode
}

//定义链表
type LinkTable struct {
	length int
	head   *LinkNode
	tail   *LinkNode
}

2.定义初始化操作

//初始化LinkNode
func InitLinkNode(data interface{}) *LinkNode {
	return &LinkNode{
		data: data,
		next: nil,
	}
}

//初始化LinkTable
func InitLinkTable() *LinkTable {
	return &LinkTable{
		length: 0,
		head:   nil,
		tail:   nil,
	}
}

3.定义链表操作

//判断链表是否为空
func IsEmpty(pLink *LinkTable) bool {
	return pLink.length == 0
}

//链表头部添加结点
func AddToHead(pLink *LinkTable, node *LinkNode) bool {
	if pLink == nil || node == nil {
		return false
	}
	if IsEmpty(pLink) {
		pLink.tail = node
	} else {
		node.next = pLink.head
	}
	pLink.head = node
	pLink.length++
	return true
}

//链表尾部添加结点
func AddToTail(pLink *LinkTable, node *LinkNode) bool {
	if pLink == nil || node == nil {
		return false
	}
	if IsEmpty(pLink) {
		pLink.head = node
	} else {
		pLink.tail.next = node
	}
	pLink.tail = node
	pLink.length++
	return true
}

//删除对应值的第一个出现的结点
func DeleteFirstValueNode(pLink *LinkTable, data interface{}) bool {
	if pLink == nil {
		return false
	}
	if pLink.head.data == data {
		if pLink.length == 1 {
			pLink.head = nil
			pLink.tail = nil
		} else {
			pLink.head = pLink.head.next
		}
		pLink.length--
		return true
	}
	var p *LinkNode = pLink.head
	for p != pLink.tail {
		if p.next.data == data {
			p.next = p.next.next
			pLink.length--
			if p.next == nil {
				pLink.tail = p
			}
			return true
		}
		p = p.next
	}
	return false
}

//查找对应值的结点
func SelectLinkNode(pLink *LinkTable, data interface{}) *LinkNode {
	if pLink == nil {
		return nil
	}
	var p *LinkNode = pLink.head
	for p != nil {
		if p.data == data {
			return p
		}
		p = p.next
	}
	return nil
}

//对链表遍历,并显示结点对应值
func ShowLinkTableValues(pLink *LinkTable) {
	var p *LinkNode = pLink.head
	if p == nil {
		fmt.Println("length=", pLink.length, " 链表为空")
		return
	}
	fmt.Print("length=", pLink.length, " ")
	for p != nil {
		fmt.Print(p.data, " ")
		p = p.next
	}
	fmt.Println()
}

4.测试

 

 5.推送到版本库

地址:bierweih/SE (github.com)

作者:584

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

571

社区成员

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

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