使用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

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

571

社区成员

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

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