重溫一遍數據結構之順序存儲結構(golang版)

目的

由於最近工做中碰到了一些關於數據結構的問題,發現有些生疏了,因此想從新本身再理一遍,就當是給本身的記錄,之因此用golang主要也是由於對goalng比較感興趣,寫起來也比較順手。
本意也不是想分享關於什麼是數據結構,由於這種概念性的東西沒有什麼太大意義,其實最重要的是讓本身能看懂本身寫了些什麼,可是代碼中寫了很是詳細的註釋,因此基本都是以代碼爲主golang

順序存儲結構

順序存儲結構是線性表中的一種,如下代碼是線性表中的順序存儲結構的表述,基本略去了些容錯和美觀的考慮,仍是以實現功能爲主數據結構

package main

//線性表中的順序存儲結構

import (
    "fmt"
)

// 線性表中存儲的數據類型
type Elem int

type 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))
}
相關文章
相關標籤/搜索