会了上一个,这个就差不离了。
tackLinkedList.go
知识兔ackage 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
}
知识兔
tackLinkedList_test.go
知识兔ackage 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()
}
}
知识兔
输出:
知识兔:/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.
知识兔