基礎篇 陣列與鍊錶

2021-08-21 15:56:27 字數 2606 閱讀 3127

理論介紹

陣列&切片

在go語言的復合資料型別中,需要認識兩種必要的資料型別

陣列跟切片都是指一系列同一型別資料的結合。陣列中包含的每個資料被稱為陣列元素,乙個陣列包含的元素個數成為陣列的長度。不過,在go語言中陣列與切片有乙個很大的區別,陣列長度在定義後不可更改,陣列宣告的時候指定的元素個數,就是此陣列新增元素的上限數目。

切片可以動態擴充存放空間,可以被隨意傳遞不會導致管理的元素被複製。相比陣列,切片是開發中更多的被用到的資料型別。

不管是陣列還是切片,在go語言中使用都非常簡單,下面通過實際的**案例來看看,陣列跟切片的使用

陣列的性質:

- 訪問元素容易

- 更新困難

**實戰

# array.go

package common

import (

"fmt"

)func arr() // 陣列, 一開始就分配好了記憶體,大小限定,不能拓展

b := int

// 切片,大小沒有限定,可以動態拓展

for _, i := range a

for _, j := range b

// 輸出陣列的第二個元素

fmt.printf("a的第二個元素 %d\n", a[1])

// 輸出切片的第五個元素

fmt.printf("b的第五個元素 %d\n", b[4])

}

在上述**中,我們分別宣告了陣列跟切片,並分別進行了遍歷與訪問,操作都有注釋,可以直接看**注釋理解。

**測試

# main.go

func main()

在go語言中程式包的入口是main包, 函式的入口是main函式,所以**中我們在main包裡面有個main函式,通過main函式執行我們的**。 在go中引入乙個包用的是import,後面跟的是包的路徑。

注意go語言中的私有、公有變數是直接根據命名規則來區分的,小寫為私有、大寫為公有。所以我們在這裡arr首字母用的是大寫,這樣我們arr就是乙個公有變數,可以在其他包裡面直接引用。

鍊錶相比陣列,鍊錶是要稍微複雜一點的資料結構。鍊錶是一種線性表,但是不會按照線性的順序儲存資料,而是在每乙個節點裡面存到寫乙個節點的指標。鍊錶的特性:

- 插入元素容易

- 元素訪問困難

**實戰

package linklist

import (

"fmt"

"log"

)// item 可以理解為範性,也就是任意的資料型別

type item inte***ce

// 乙個節點,除了自身的資料之外,還必須指向下乙個節點,尾部節點指向為nil

type linknode struct

// go語言方法,對比與下面的newlinknode,方法可以理解為物件導向裡面物件的方法,雖然實現的功能

// 跟函式類似,但是方式是繫結在物件上的,也就是說我們此處的add是繫結與head這個linknode物件的。

// 這個是go語言區別與其他語言的設計方式,也是go語言很重要的一部分。

func (head *linknode) add(payload item)

newnode := linknode

point.next = &newnode

// 頭部插入

//newnode := linknode

= head

}// 建立乙個新的鍊錶。 函式,對比與上面的方法,函式是沒有繫結任何物件的。

// go語言的函式需要指明引數跟返回值,在此函式中,我們的引數是length,返回值是乙個linknode物件

// 除了繫結之外,函式跟方法並沒有什麼不同

func newlinknode(length int) *linknode

var head *linknode

head = &linknode{}

for i :=0; ivar newnode *linknode

newnode = &linknode

newnode.next = head

head = newnode

}return head

}

在**中,我們首先建立了乙個linknode物件,乙個linknode物件包含兩個元素,乙個是payload(引數)另乙個是next也就是下乙個節點。 我們用go語言的語法,實現了乙個add方法,此方法可以用於新增元素。在乙個鍊錶中新增元素可以採用頭部插入,或者尾部插入。當然中間插入也是可行的,只需要將之前的鏈結斷開,然後重新鏈結就可以了。

package linklist

import "testing"

func testlinknode_add(t *testing.t)

}

測試**我們對鍊錶進行了遍歷,輸出我們放在了error裡面,大家可以執行go test檢視輸出。以上就是簡單的關於go語言對陣列跟鍊錶的介紹。

專案位址

參考教程

Java基礎篇 陣列排序

每一趟都從待排序的資料元素中選擇處最小 或最大 的乙個元素,順序地放在已排序好的數列的最末端,直到全部資料元素都放入了已排序好的數列。public int choicesort int array 比較相鄰元素的值,如果滿足條件則交換位置,直到所有相鄰元素都不滿足條件為止。public int bu...

C (六)基礎篇 陣列

本隨筆為個人複習鞏固知識用,多從書上總結與理解歸納得來,如有錯誤麻煩指正 資料簡單來說就是將一連串相同型別的的資料按順序儲存起來的容器。陣列中的數值型別預設為0,引用型別預設為null。陣列的索引從0開始,具有n個元素的陣列的縮影為從0 n 1。1.陣列的建立 宣告乙個用於儲存int型別的一維陣列並...

演算法 資料結構篇 陣列和鍊錶

演算法和資料結構都是非常基礎的內容,經常使用,但是又很容易被忽視,而被重視的時候往往是面試官提問的時候。之前很不理解為什麼面試官總喜歡問演算法和資料結構,日常價值不大的東西。後來隨著工作的深入,越發的理解 演算法 資料結構 程式 之所以後來理解了這個公式,系統學過演算法和資料結構的知識,清楚的知道它...