Golang编写LinkTable库

Maverick 2022-04-08 12:02:01

实验目的

用Go编写一个LinkTable的库,写一个帖子分享一下定义接口和设计一个程序库的心得体会,同时将代码的版本库链接贴上。

实验内容

1. 设计LinkTable

定义结点、链表结构体:

//创建 结点 结构体
type Node struct{
    Data interface{}
    Next *Node               //  Next = &Node
}
//链表 结构体
type LinkTable struct{
    Head *Node
    Length int
}

设计链表功能接口:

// 设计接口
type Method interface {
    Insert(i int,v interface{})            //插入
    Delete(i int)                          //删除
    GetLength() int                        //获取长度
    Search(v interface{}) int              //查找
    isNull()bool                           //判断链表是否为空
}

结点和链表的创建函数:

//创建结点
func CreateNode(v interface{})*Node{
    return &Node{v,nil}
}

//创建空链表
func CreateList()*LinkTable{
    return &LinkTable{CreateNode(nil),0}
}

插入函数:

//在i处插入节点
func (list *LinkTable)Insert(i int,v interface{}){
    s := CreateNode(v)  //*Node
    pre := list.Head  //*Node
    for count:=0;count<=i-1;count++{
        if count == i-1{
            s.Next = pre.Next
            pre.Next = s
            list.Length++
        }
        pre = pre.Next
 
    }
}

删除函数:

//删除i处节点
func (list *LinkTable)Delete(i int){
    pre := list.Head
    for count:=0;count<=i-1;count++{
        s := pre.Next
        if count == i-1{
            pre.Next = s.Next
            list.Length--
        }
        pre = pre.Next
    }
}

求链表长度:

//返回链表长度
func (list *LinkTable)GetLength() int{
    pre := list.Head
    for pre.Next!=nil{
        list.Length++
    }
    return list.Length
}

查找函数:

//查值v所在位置
func (list *LinkTable)Search(v interface{}) int{
    pre := list.Head.Next
    for i:=1;i<=list.Length;i++{
        if pre.Data == v{
            return i
        }
        pre = pre.Next
    }
    return 0
}

判断是否为空:

//是否为空
func (list *LinkTable) isNull() bool{
    pre := list.Head.Next
    if pre == nil{
        return true
    }
    return false
}

打印链表:

//打印链表
func PrintList(list *LinkTable){
    pre := list.Head  //*Node
    fmt.Println("LinkTable shows as follow:...")
    for i:=0;i<=list.Length;i++{
        fmt.Printf( "%v\n",pre)
        pre  = pre.Next
    }
}

功能测试:

// main函数测试
func main(){
    LinkTable := CreateList()
    //fmt.Println("List is Null:",LinkTable.isNull())
    var M Method
    M = LinkTable
    M.Insert(1,2)
    M.Insert(2,8)
    M.Insert(1,1)
    PrintList(LinkTable)
    fmt.Println("List length is:",LinkTable.Length)
    fmt.Println("元素8在位置  ",M.Search(8))
    fmt.Println("元素10在位置  ",M.Search(10))
    fmt.Println("List is Null:",LinkTable.isNull())
    M.Delete(1)
    PrintList(LinkTable)
    fmt.Println("List length is:",LinkTable.Length)
}  

2. 上传远程仓库

使用如下命令进行上传:

git add .
git commit
git push origin

 心得体会

在设计接口和定义一个程序库前,首先需要进行需求分析。需求分析就是需求分析师对用户期望的软件行为进行表述,并进一步用对象或实体的状态、属性和行为来定义需求。明确软件需求后才能更好地编写程序。

在软件设计时采用KISS(Keep It Simple & Stupid)原则,可以使得软件更加简洁,增加易读性,方便调试。在写代码前可以先设计一个伪代码框架,优化代码结构后再将设计翻译成实现代码。

作者:201

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

571

社区成员

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

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