go编写LinkTable库

qq_40953724 2022-04-12 16:19:23

一、编写LinkTable

1、结构体定义

type Node struct {
	data interface{}
	next *Node
}
type LinkTable struct {
	headNode *Node //头节点
	length   int   //当前链表的长度
}

2、初始化

func initLinkTable() *LinkTable {
	node := new(Node)
	linkTable := new(LinkTable)
	linkTable.headNode = node
	linkTable.length = 0
	return linkTable
}

3、插入

//头插法
func insertHeadNode(data interface{}, linkTable *LinkTable) {
	node := &Node{data, nil}
	node.next = linkTable.headNode.next
	linkTable.headNode.next = node
	linkTable.length++
}

//尾插法
func insertTailNode(data interface{}, linkTable *LinkTable) {
	node := &Node{data, nil}
	curNode := getTailNode(linkTable)
	curNode.next = node
	linkTable.length++
}

//指定位置插入节点
func append(index int, data interface{}, linktable *LinkTable) {
	if index <= 0 || index > linktable.length+1 {
		fmt.Println("当前位置错误")
		return
	}
	curNode := linktable.headNode
	//找到需要插入节点的前一个节点
	for j := 0; j < index-1; j++ {
		curNode = curNode.next
	}
	node := new(Node)
	node.data = data
	node.next = curNode.next
	curNode.next = node
	linktable.length++
}

4、查找

//按序号查找
func findNodeByIndex(index int, linktable *LinkTable) *Node {
	if index <= 0 || index > linktable.length {
		fmt.Println("当前序号错误")
		return nil
	}
	curNode := linktable.headNode
	for j := 0; j < index; j++ {
		curNode = curNode.next
	}
	return curNode
}

//按值查找
func findNodeByValue(data interface{}, linktable *LinkTable) *Node {
	curNode := linktable.headNode.next
	for curNode != nil {
		if curNode.data == data {
			return curNode
		}
		curNode = curNode.next
	}
	return nil
}

5、打印链表

func showLinkTableData(linkTable *LinkTable) {
	curNode := linkTable.headNode.next
	for curNode != nil {
		fmt.Print(curNode.data)
		fmt.Print(" ")
		curNode = curNode.next
	}
	fmt.Println()
}

6、删除节点

func deleteNode(index int, linktable *LinkTable) {
	if index <= 0 || index > linktable.length {
		fmt.Println("当前位置错误")
		return
	}
	curNode := linktable.headNode
	//找到删除节点的前一个节点
	for j := 0; j < index-1; j++ {
		curNode = curNode.next
	}
	curNode.next = curNode.next.next
	linktable.length--
}

二、测试

 

三、上传远程仓库

git add .\menu.go .\LinkTable.go
git commit -m "modified menu.go(add function testLinkTable()) and commit LinkTable.go"
git push origin master

 分别使用以上命令,将新建文件LinkTable.go和修改后的文件menu.go提交到暂存库和本地库,最后push至远程仓库。结果如下

 作者:481

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

571

社区成员

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

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