實現連結串列定義、尾部插入節點、頭部插入節點
阿新 • • 發佈:2022-05-07
連結串列定義
package main import "fmt" // Student 每個節點包含下一個節點的地址,這樣把所有的節點都串起來了,通常把連結串列中的第一個節點叫做連結串列頭 /* type Student struct { Name string Next *Student } */ // 定義一個簡單的連結串列 type Student struct { Name string Age uint8 Score float32 Next *Student } func main() { // 定義一個頭節點 var head Student head.Name = "zhang" head.Age = 18 head.Score = 88.5 var stu1 Student stu1.Name = "li" stu1.Age = 35 stu1.Score = 60 // 將兩個節點連線起來 head.Next = &stu1 var p *Student = &head // 將p指向連結串列的頭部 for p != nil { fmt.Println(*p) p = p.Next } }
尾部插入節點
package main import ( "fmt" "math/rand" ) // 每個節點都包含下一個節點的地址,這樣就把所有的節點都串起來了,通常我們把第一個節點叫做連結串列頭 // Student 定義一個連結串列結構 type Student struct { Name string Age int Score float32 Next *Student } func trans(node *Student) { for node != nil { fmt.Println(*node) node = node.Next } } func main() { // 通常我們把第一個節點叫做連結串列頭 var head Student head.Name = "zhang" head.Age = 18 head.Score = 88.5 // 尾部插入法 var tail *Student = &head // 因為是指標型別,所以可以修改它的Next值 for i := 0; i < 10; i++{ var stu = Student{ Name: fmt.Sprintf("stu%d", i), Age: rand.Intn(100), Score: rand.Float32() * 100, } tail.Next = &stu // 把尾部節點的下一個節點設定為新生成的節點 tail = &stu // 把新生成的節點賦值給尾部節點 } // 輸出所有節點 trans(&head) } /* 輸出結果 {zhang 18 88.5 0xc0000764b0} {stu0 81 94.05091 0xc0000764e0} {stu1 47 43.77142 0xc000076510} {stu2 81 68.682304 0xc000076540} {stu3 25 15.651925 0xc000076570} {stu4 56 30.091187 0xc0000765a0} {stu5 94 81.36399 0xc0000765d0} {stu6 62 38.06572 0xc000076600} {stu7 28 46.888985 0xc000076630} {stu8 11 29.310184 0xc000076660} {stu9 37 21.855305 <nil>} */
頭部插入節點
package main import ( "fmt" "math" "math/rand" ) // 每個節點都包含下一個節點的地址,這樣所有的節點都串起來了,通常我們把第一個節點叫做連結串列頭 type Student struct { Name string Age int Score float64 Next *Student } func trans(s *Student){ for s != nil { fmt.Println(*s) s = s.Next } } func main() { var head *Student = new(Student) head.Name = "zhang" head.Age = 18 head.Score = 88.5 // 頭部插入法 for i := 0; i < 10; i++{ var stu = Student{ Name: fmt.Sprintf("stu%d", i + 1), Age: rand.Intn(100), Score: math.Round(rand.Float64() * 100), } stu.Next = head head = &stu } trans(head) } /* {stu10 37 22 0xc000076660} {stu9 11 29 0xc000076630} {stu8 28 47 0xc000076600} {stu7 62 38 0xc0000765d0} {stu6 94 81 0xc0000765a0} {stu5 56 30 0xc000076570} {stu4 25 16 0xc000076540} {stu3 81 69 0xc000076510} {stu2 47 44 0xc0000764e0} {stu1 81 94 0xc0000764b0} {zhang 18 88.5 <nil>} */