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