链表

 

链表(Linked list),是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

每个节点包含下一个节点的地址,这样把所有的节点串起来了,通常把 链表中的第一个节点叫做链表头

单链表

golang基础数据结构链表

package main

import (
	"fmt"
)

type test struct {
	name  string
	age   uint8
	intro string
	next  *test
}

func printList(str *test) {
	for str != nil {
		fmt.Println(*str)
		str = str.next
	}
}

func main() {
	var test1 test
	test1.name = "zhangsan"
	test1.age = 123
	test1.intro = "dasdasd"

	var test2 test
	test2.name = "lisi"
	test2.age = 33
	test2.intro = "dadasdasdsdasd"

	test1.next = &test2

	printList(&test1)
}

golang基础数据结构链表

链表的头部插入 

package main

import (
	"fmt"
	"math/rand"
)

type test struct {
	name  string
	age   int
	intro string
	next  *test
}

func printlist(list *test) {
	for list != nil {
		fmt.Println(*list)
		list = list.next
	}
}

func insertTop(list *test) {
	for n := 0; n < 10; n++ {
		var student *test = &test{
			name:  fmt.Sprintf("stu_%d", n),
			age:   rand.Intn(100),
			intro: fmt.Sprintf("stu_dasdasdas_%d", n),
		}
		student.next = list //将student的next插入到list之前,即stu.next=list
		list = student      //将stu赋值为list

		// list.next = student.next
	}
	printlist(list)
}

func main() {

	var stu *test = &test{
		name:  "lisi",
		age:   rand.Intn(100),
		intro: "aaaaaaaaaaaaa",
	}

	insertTop(stu)

}

golang基础数据结构链表

package main

import (
	"fmt"
	"math/rand"
)

type test struct {
	name  string
	age   int
	intro string
	next  *test
}

func printlist(list *test) {
	for list != nil {
		fmt.Println(*list)
		list = list.next
	}
}

func insertTop(list **test) { //指针的指针

	for n := 0; n <= 10; n++ {
		var student *test = &test{
			name:  fmt.Sprintf("stu_%d", n),
			age:   rand.Intn(100),
			intro: fmt.Sprintf("stu__%d", n),
		}

		student.next = *list
		*list = student
	}
}

func main() {
	var stu *test = &test{
		name:  "lisi",
		age:   rand.Intn(100),
		intro: "啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊",
	}

	insertTop(&stu)
	printlist(stu)
}

golang基础数据结构链表

 

尾部插入

package main

import (
	"fmt"
	"math/rand"
)

type test struct {
	name  string
	age   int
	intro string
	next  *test
}

func printlist(list *test) {
	for list != nil {
		fmt.Println(*list)
		list = list.next
	}
}

func insertTail(list *test) {

	var test1 = list
	for n := 0; n <= 10; n++ {
		student := test{
			name:  fmt.Sprintf("stu_%d", n),
			age:   rand.Intn(100),
			intro: fmt.Sprintf("stustustustustustustu%d", n),
		}

		test1.next = &student
		test1 = &student
	}
}

func main() {

	var stu = test{
		name:  "zhangsan",
		age:   16,
		intro: "zhangsanlisi",
	}

	insertTail(&stu)
	fmt.Println(&stu)

}