重溫一遍資料結構之線性表(golang版)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

目的

因為最近工作中碰到了一些關於資料結構的問題,發現有些生疏了,所以想重新自己再理一遍,就當是給自己的記錄,之所以用golang主要也是因為對goalng比較感興趣,寫起來也比較順手。
本意也不是想分享關於什麼是資料結構,因為這種概念性的東西沒有什麼太大意義,其實最重要的是讓自己能看懂自己寫了些什麼,但是代碼中寫了非常詳細的注釋,所以基本都是以代碼為主

線性表之順序儲存結構

以下代碼是線性表中的順序儲存結構,基本略去了些容錯的考慮,還是以實現功能為主

package main//線性表中的順序儲存結構import (    "fmt")// 線性表中儲存的資料類型type Elem inttype SqList struct {    //最大長度    maxsize int    // 當前長度    length int    //儲存資料    data   []Elem}//初始化func New(maxsize int) *SqList {    return &SqList{maxsize: maxsize, data: make([]Elem, maxsize)}}//檢查線性表是否為空白func (list *SqList) IsEmpty() bool {    return 0 == list.length}//判斷線性表是否已滿func (list *SqList) IsFull() bool {    return list.length == list.maxsize}//在i個位置之前插入新的元素e,複雜度為O(n)func (list *SqList) Insert(i int, e Elem) bool {    if i < 1 || i > list.length {        fmt.Println("pls check i:", i)        return false    }    for k := list.length; k > i-1; k-- {        list.data[k] = list.data[k-1]    }    list.data[i-1] = e    list.length++    return true}//刪除位元置為i的元素,複雜度為O(n)func (list *SqList) Del(i int) bool {    if i < 1 || i > list.length {            fmt.Println("pls check i:", i)        return false    }    for k := i - 1; k < list.length-1; k++ {        list.data[k] = list.data[k+1]    }    list.data[list.length-1] = 0    list.length--    return true}//擷取第i個位置的元素,複雜度為O(1)func (list SqList) GetElem(i int) Elem{    if i < 1 || i > list.length {        fmt.Println("pls check i:", i)        return -1    }    return list.data[i-1]}//追加一個元素func (list *SqList) append(e Elem) bool {    if list.IsFull() {        fmt.Println("list is fulle")        return false    }    list.data[list.length] = e    list.length++    return true}func main() {    sq := New(10)    sq.append(99)    sq.append(999)    sq.append(9999)    sq.append(99999)    fmt.Println(sq)    sq.Insert(4, 888)    fmt.Println(sq)    //fmt.Println(r)    sq.Del(2)    fmt.Println(sq)    fmt.Println(sq.GetElem(3))}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.