package main //鏈表實現 import ( "fmt" "os" ) //定義錯誤常量 const ( ERROR = -1000000001 ) //定義元素類型 type Element int64 //定義節點 type LinkNode struct { Data Element //數據域 Nest *LinkNode //指針域,指向下一個節點 } //函數接口 type LinkNoder interface { Add(head *LinkNode, new *LinkNode) //後面添加 Delete(head *LinkNode, index int) //刪除指定index位置元素 Insert(head *LinkNode, index int, data Element) //在指定index位置插入元素 GetLength(head *LinkNode) int //獲取長度 Search(head *LinkNode, data Element) //查詢元素的位置 GetData(head *LinkNode, index int) Element //獲取指定index位置的元素 } //添加 頭結點,數據 func Add(head *LinkNode, data Element) { point := head //臨時指針 for point.Nest != nil { point = point.Nest //移位 } var node LinkNode //新節點 point.Nest = &node //賦值 node.Data = data head.Data = Element(GetLength(head)) //打印所有的數據 if GetLength(head) > 1 { Traverse(head) } } //刪除 頭結點 index 位置 func Delete(head *LinkNode, index int) Element { //判斷index合法性 if index < 0 || index > GetLength(head) { fmt.Println("please check index") return ERROR } else { point := head for i := 0; i < index-1; i++ { point = point.Nest //移位 } point.Nest = point.Nest.Nest //賦值 data := point.Nest.Data return data } } //插入 頭結點 index位置 data元素 func Insert(head *LinkNode, index int, data Element) { //檢驗index合法性 if index < 0 || index > GetLength(head) { fmt.Println("please check index") } else { point := head for i := 0; i < index-1; i++ { point = point.Nest //移位 } var node LinkNode //新節點,賦值 node.Data = data node.Nest = point.Nest point.Nest = &node } } //獲取長度 頭結點 func GetLength(head *LinkNode) int { point := head var length int for point.Nest != nil { length++ point = point.Nest } return length } //搜索 頭結點 data元素 func Search(head *LinkNode, data Element) { point := head index := 0 for point.Nest != nil { if point.Data == data { fmt.Println(data, "exist at", index, "th") break } else { index++ point = point.Nest if index > GetLength(head)-1 { fmt.Println(data, "not exist at") break } continue } } } //獲取data 頭結點 index位置 func GetData(head *LinkNode, index int) Element { point := head if index < 0 || index > GetLength(head) { fmt.Println("please check index") return ERROR } else { for i := 0; i < index; i++ { point = point.Nest } return point.Data } } //遍歷 頭結點 func Traverse(head *LinkNode) { point := head.Nest for point.Nest != nil { fmt.Println(point.Data) point = point.Nest } fmt.Println("Traverse OK!") } //主函數測試 func main() { var head LinkNode = LinkNode{Data: 0, Nest: nil} head.Data = 0 var nodeArray []Element for i := 0; i < 10; i++ { nodeArray = append(nodeArray, Element(i+1+i*100)) Add(&head, nodeArray[i]) } Delete(&head, 3) Search(&head, 2032) Insert(&head, 23, 10010) Traverse(&head) fmt.Println("data is", GetData(&head, 6)) fmt.Println("length:", GetLength(&head)) os.Exit(0) }