Go语言实现LinkTable

qq_41822154 2022-04-06 23:50:09

1. LinkTable数据结构定义

// 结点数据结构
 type Node struct {
	next *Node	
	prev *Node
	data int
 }

// 双链表数据结构
type LinkTable struct {
	pHead *Node
	pTail *Node
	len int
}

2.创建链表

func CreatLinkTable() *LinkTable {
	var pLinkTable *LinkTable = new(LinkTable)
	if pLinkTable == nil {
		return nil
	} 
	pLinkTable.pHead = nil
	pLinkTable.pTail = nil
	pLinkTable.len = 0
	return pLinkTable
}

3.删除链表

func DetelLinkTable(pLinktable *LinkTable) int {
	// 删除空链表,返回-1
	if pLinktable == nil {
		return -1
	}
	pLinktable.pHead = nil
	pLinktable.pTail = nil
	pLinktable.len = 0
	return 0
}

4.尾部插入结点

func PushBack(pLinktable *LinkTable, pNode *Node) int {
	if pLinktable == nil || pNode == nil {
		return -1
	}
	if pLinktable.pHead == nil {
		pLinktable.pHead = pNode
		pLinktable.pTail = pNode
		pNode.next = nil
		pNode.prev = nil
	}else {
		pLinktable.pTail.next = pNode
		pNode.prev = pLinktable.pTail
		pLinktable.pTail = pNode
	}
	pLinktable.len++
	return 0
}

5.头部插入结点

func AddNode(pLinktable *LinkTable, pNode *Node) int {
	if pLinktable == nil || pNode == nil {
		return -1
	}
	if pLinktable.pHead == nil {
		pLinktable.pHead = pNode
		pLinktable.pTail = pNode
		pNode.next = nil
		pNode.prev = nil
	}else {
		pLinktable.pHead.prev = pNode
		pNode.next = pLinktable.pHead
		pLinktable.pHead = pNode
	}
	pLinktable.len++
	return 0
}

6.从双链表中删除指定结点

func DelNode(pLinktable *LinkTable, pNode *Node) int {
	if pLinktable == nil || pNode == nil {
		return -1
	}
	if pLinktable.pHead == pNode {
		pLinktable.pHead = pLinktable.pHead.next
		pLinktable.len--
		if pLinktable.pHead == nil {
			pLinktable.pTail = nil
		}
		return 0
	}
	var q *Node = pLinktable.pHead
	for q != nil {
		if q.next == pNode {
			q.next = q.next.next
			q = q.next.prev
			pLinktable.len--
			if pLinktable.len == 0 {
				pLinktable.pTail = nil
			}
			return 0
		}
		q = q.next
	}
	return -1
}

7.在双链表中查找指定结点

func SearchNode(pLinktable *LinkTable, pNode *Node) bool {
	if pLinktable == nil || pNode == nil {
		return false
	}
	var q *Node = pLinktable.pHead
	for q != nil {
		if q == pNode {
			return true
		}
		q = q.next
	}
	return false
}

8.获取双链表头结点

func GetLinkTableHead(pLinktable *LinkTable) *Node {
	if pLinktable == nil {
		return nil
	}
	return pLinktable.pHead
}

9.获取双链表尾结点

func GetLinkTableTail(pLinktable *LinkTable) *Node {
	if pLinktable == nil {
		return nil
	}
	return pLinktable.pTail
}

10.获取双链表长度

func GetLinkTableLen(pLinktable *LinkTable) int {
	if pLinktable == nil {
		return 0
	}
	return pLinktable.len
}

11.提交至远程仓库

 

仓库地址:https://github.com/Sleepingnow/SELab/blob/main/LinkListTable.go 

作者:525

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

571

社区成员

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

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