morexyoung 2019-10-21
会了上一个,这个就差不离了。
StackLinkedList.go
package StackLinkedList type Node struct { data int next *Node } type Stack struct { top *Node } func (list *Stack) Push(i int) { data := &Node{data: i} if list.top != nil { data.next = list.top } list.top = data } func (list *Stack) Pop() (int, bool) { if list.top == nil { return 0, false } i := list.top.data list.top = list.top.next return i, true } func (list *Stack) Peek() (int, bool) { if list.top == nil { return 0, false } return list.top.data, true } func (list *Stack) Get() [] int { var items[]int current := list.top for current != nil { items = append(items, current.data) current = current.next } return items } func (list *Stack) IsEmpty() bool { return list.top == nil } func (list *Stack) Empty() { list.top = nil }
StackLinkedList_test.go
package StackLinkedList import ( "fmt" "math/rand" "testing" "time" ) func TestStackLinkedList(t *testing.T) { random := rand.New(rand.NewSource(time.Now().UnixNano())) headNode := &Node{ data: random.Intn(100), next: nil, } stackLinkedList := &Stack{ top: headNode, } fmt.Println(stackLinkedList.Get()) randNumber := random.Intn(100) stackLinkedList.Push(randNumber) stackLinkedList.Push(random.Intn(100)) stackLinkedList.Push(random.Intn(100)) stackLinkedList.Push(random.Intn(100)) fmt.Println(stackLinkedList.Get()) retResult, retBool := stackLinkedList.Pop() if retBool == true { fmt.Println(retResult) } stackLinkedList.Empty() if stackLinkedList.IsEmpty() == false { t.Fail() } }
输出:
D:/Go/bin/go.exe test -v [D:/go-project/src/StackLinkedList] === RUN TestStackLinkedList [84] [34 74 26 11 84] 34 --- PASS: TestStackLinkedList (0.00s) PASS ok StackLinkedList 2.680s 成功: 进程退出代码 0.