571
社区成员
发帖
与我相关
我的任务
分享内容:使用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
}


学号:260