golang 實現單鏈表

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
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)}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.