go 实现 linktable

Bebop_615 2022-05-21 18:54:21

具体内容:定义 linktable 的数据结构、定义并实现相应的接口(初始化、插入节点、删除节点、查找)。
最后上传到远程库中。

1. 定义数据结构

// 定义为单向链表
type Node struct {
    data int
    Next *Node
}

type LinkTable struct {
    // 链表长度
    lenth int
    head  *Node
    tail  *Node
}

2.构造初始化 linktable

// 构造初始化
func initLinkTable() *LinkTable {
    // 初始化为带头节点的链表
    var pTable *LinkTable = new(LinkTable)
    if pTable == nil {
        return nil
    }
    var pNode *Node = new(Node)
    pNode.next = nil
    pTable.lenth = 0
    // 首尾指针初始时均指向头节点
    pTable.head = pNode
    pTable.tail = pNode
    return pTable
}

3. 在尾部插入节点

// 在尾部增加节点
func pushBack(pTable *Table, key int) int {
    // 链表和节点不能为空指针
    if pTable == nil || pNode == nil {
        return -1
    }
    temp := new(Node)
    temp.data = key
    pTable.tail.next = temp
    pTable.tail = temp
    temp.next = nil
    pTable.lenth++
    return 0
}

4. 按给定的值查找结点

// 按给定的值查找结点
func findKey(pTable *Table, key int) *Node {
    // 链表长度为 0 或表指针为空,返回 nil
    if pTable == nil || pTable.lenth == 0 {
        return nil
    }
    var p *Node = pTable.head
    for p != nil {
        if p.data == key {
            return p
        }
        p = p.next
    }
    // 未找到则返回 nil
    return nil
}

5. 按给定值删除节点,返回删除节点的个数

// 按给定值删除节点,返回删除节点的个数
func delete(pTable *Table, key int) int {
    // 表长度为 0 或 表指针为 nil
    if pTable == nil || pTable.lenth == 0 {
        return 0
    }

    count := 0
    pre := pTable.head
    p := pre.next

    for p != nil {
        // 删除所有 data == key 的结点
        if p.data == key {
            pre.next = p.next
            p = p.next
            pTable.lenth--
            count++
            continue
        }
        pre = p
        p = p.next
    }
    return count
}

6. 取第一个结点

// 取第一个结点
func getHead(pTable *LinkTable) *Node {
    // 表长度要大于0
    if pTable == nil && pTable.lenth > 0 {
        return nil
    }
    return pTable.head
}

7. 取最后一个结点


// 取最后一个结点
func getTail(pLinkTable *LinkTable) *Node {
    // 表长度要大于0
    if pLinkTable == nil && pLinkTable.lenth > 0 {
        return nil
    }
    return pLinkTable.tail
}

8. 推送到远程库

Gitee 库链接:sheldon-z/menu

作者:615

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

566

社区成员

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

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