目前而言區塊鏈是一門新興前沿行業,但也是一門綜合複雜性強的學科,學習區塊鏈需要有一定的學習能力與知識基礎。然而很多線下培訓機構卻只顧收取高額報名費用,將使用者的實際情況置若罔聞,不設報名門檻,不對報名人員進行甄別篩選,實則是一種不負責任的態度。
兄弟連教育Go全棧與區塊鏈培訓課程已從多層面顛覆傳統培訓機構運營思維,區塊鏈課程的開設在一定程度上加大了福士對這一專業領域的認知,其構建起的區塊鏈世界也必將在未來為我們呈現更加高效的生活。
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)
}