Skip to content

Commit 7b15a08

Browse files
committedNov 3, 2022
refactor
1 parent 87d37a3 commit 7b15a08

14 files changed

+137
-28
lines changed
 

‎README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ IsNotEmpty() bool
8484
## 栈中元素个数
8585

8686
```
87-
Len() int
87+
Size() int
8888
```
8989

9090

‎array_stack.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ func (x *ArrayStack[T]) Pop() T {
4040

4141
func (x *ArrayStack[T]) PopE() (T, error) {
4242
if x.topIndex == 0 {
43-
return nil, ErrStackEmpty
43+
var zero T
44+
return zero, ErrStackEmpty
4445
}
4546
value := x.slice[x.topIndex]
4647
x.topIndex--
@@ -54,7 +55,8 @@ func (x *ArrayStack[T]) Peek() T {
5455

5556
func (x *ArrayStack[T]) PeekE() (T, error) {
5657
if x.topIndex == 0 {
57-
return nil, ErrStackEmpty
58+
var zero T
59+
return zero , ErrStackEmpty
5860
}
5961
return x.slice[x.topIndex], nil
6062
}
@@ -67,7 +69,7 @@ func (x *ArrayStack[T]) IsNotEmpty() bool {
6769
return x.topIndex != 0
6870
}
6971

70-
func (x *ArrayStack[T]) Len() int {
72+
func (x *ArrayStack[T]) Size() int {
7173
return x.topIndex
7274
}
7375

‎array_stack_test.go

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package stack
2+
3+
import (
4+
"github.com/stretchr/testify/assert"
5+
"testing"
6+
)
7+
8+
func TestArrayStack_Clear(t *testing.T) {
9+
stack := NewArrayStack[int]()
10+
stack.Push(1)
11+
stack.Push(2)
12+
assert.Equal(t, 2, stack.Size())
13+
14+
}
15+
16+
func TestArrayStack_IsEmpty(t *testing.T) {
17+
18+
}
19+
20+
func TestArrayStack_IsNotEmpty(t *testing.T) {
21+
22+
}
23+
24+
func TestArrayStack_Size(t *testing.T) {
25+
26+
}
27+
28+
func TestArrayStack_Peek(t *testing.T) {
29+
30+
}
31+
32+
func TestArrayStack_PeekE(t *testing.T) {
33+
34+
}
35+
36+
func TestArrayStack_Pop(t *testing.T) {
37+
38+
}
39+
40+
func TestArrayStack_PopE(t *testing.T) {
41+
42+
}
43+
44+
func TestArrayStack_Push(t *testing.T) {
45+
46+
}
47+
48+
func TestArrayStack_String(t *testing.T) {
49+
50+
}
51+
52+
func TestNewArrayStack(t *testing.T) {
53+
54+
}

‎go.mod

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
11
module github.com/CC11001100/go-stack
22

33
go 1.18
4+
5+
require (
6+
github.com/davecgh/go-spew v1.1.1 // indirect
7+
github.com/pmezard/go-difflib v1.0.0 // indirect
8+
github.com/stretchr/objx v0.5.0 // indirect
9+
github.com/stretchr/testify v1.8.1 // indirect
10+
gopkg.in/yaml.v3 v3.0.1 // indirect
11+
)

‎go.sum

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
2+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
3+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
4+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
5+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
6+
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
7+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
8+
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
9+
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
10+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
11+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
12+
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
13+
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
14+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
15+
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
16+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
17+
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

‎linked_stack.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ func (x *LinkedStack[T]) Pop() T {
3636

3737
func (x *LinkedStack[T]) PopE() (T, error) {
3838
if x.top == nil {
39-
return nil, ErrStackEmpty
39+
var zero T
40+
return zero, ErrStackEmpty
4041
}
4142
top := x.top
4243
x.top = x.top.next
4344
value := top.value
4445
top.next = nil
45-
top.value = nil
46+
var zero T
47+
top.value = zero
4648
x.ln--
4749
return value, nil
4850
}
@@ -54,7 +56,8 @@ func (x *LinkedStack[T]) Peek() T {
5456

5557
func (x *LinkedStack[T]) PeekE() (T, error) {
5658
if x.top == nil {
57-
return nil, ErrStackEmpty
59+
var zero T
60+
return zero, ErrStackEmpty
5861
}
5962
return x.top.value, nil
6063
}
@@ -67,7 +70,7 @@ func (x *LinkedStack[T]) IsNotEmpty() bool {
6770
return x.top != nil
6871
}
6972

70-
func (x *LinkedStack[T]) Len() int {
73+
func (x *LinkedStack[T]) Size() int {
7174
return x.ln
7275
}
7376

‎max_stack.go

+8-5
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ func (x *MaxStack[T]) Pop() T {
4444
func (x *MaxStack[T]) PopE() (T, error) {
4545
e, err := x.stack.PopE()
4646
if err != nil {
47-
return nil, err
47+
var zero T
48+
return zero , err
4849
}
4950
return e.value, nil
5051
}
@@ -57,7 +58,8 @@ func (x *MaxStack[T]) Peek() T {
5758
func (x *MaxStack[T]) PeekE() (T, error) {
5859
e, err := x.stack.PeekE()
5960
if err != nil {
60-
return nil, err
61+
var zero T
62+
return zero, err
6163
}
6264
return e.value, nil
6365
}
@@ -70,8 +72,8 @@ func (x *MaxStack[T]) IsNotEmpty() bool {
7072
return x.stack.IsNotEmpty()
7173
}
7274

73-
func (x *MaxStack[T]) Len() int {
74-
return x.stack.Len()
75+
func (x *MaxStack[T]) Size() int {
76+
return x.stack.Size()
7577
}
7678

7779
func (x *MaxStack[T]) Clear() error {
@@ -90,7 +92,8 @@ func (x *MaxStack[T]) GetMax() T {
9092
func (x *MaxStack[T]) GetMaxE() (T, error) {
9193
e, err := x.stack.PeekE()
9294
if err != nil {
93-
return nil, err
95+
var zero T
96+
return zero, err
9497
}
9598
return e.max, nil
9699
}

‎min_stack.go

+8-5
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ func (x *MinStack[T]) Pop() T {
4444
func (x *MinStack[T]) PopE() (T, error) {
4545
e, err := x.stack.PopE()
4646
if err != nil {
47-
return nil, err
47+
var zero T
48+
return zero, err
4849
}
4950
return e.value, nil
5051
}
@@ -57,7 +58,8 @@ func (x *MinStack[T]) Peek() T {
5758
func (x *MinStack[T]) PeekE() (T, error) {
5859
e, err := x.stack.PeekE()
5960
if err != nil {
60-
return nil, err
61+
var zero T
62+
return zero, err
6163
}
6264
return e.value, nil
6365
}
@@ -70,8 +72,8 @@ func (x *MinStack[T]) IsNotEmpty() bool {
7072
return x.stack.IsNotEmpty()
7173
}
7274

73-
func (x *MinStack[T]) Len() int {
74-
return x.stack.Len()
75+
func (x *MinStack[T]) Size() int {
76+
return x.stack.Size()
7577
}
7678

7779
func (x *MinStack[T]) Clear() error {
@@ -90,7 +92,8 @@ func (x *MinStack[T]) GetMin() T {
9092
func (x *MinStack[T]) GetMinE() (T, error) {
9193
e, err := x.stack.PeekE()
9294
if err != nil {
93-
return nil, err
95+
var zero T
96+
return zero, err
9497
}
9598
return e.min, nil
9699
}

‎stack.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ type Stack[T any] interface {
2121
// IsNotEmpty 栈是否不为空
2222
IsNotEmpty() bool
2323

24-
// Len 返回栈中元素的个数
25-
Len() int
24+
// Size 返回栈中元素的个数
25+
Size() int
2626

2727
// Clear 清空栈
2828
Clear() error

‎sync_array_stack.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ func (x *SyncArrayStack[T]) IsNotEmpty() bool {
5858
return x.stack.IsNotEmpty()
5959
}
6060

61-
func (x *SyncArrayStack[T]) Len() int {
61+
func (x *SyncArrayStack[T]) Size() int {
6262
x.lock.RLock()
6363
defer x.lock.RLock()
64-
return x.stack.Len()
64+
return x.stack.Size()
6565
}
6666

6767
func (x *SyncArrayStack[T]) Clear() error {

‎sync_linked_stack.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ func (x *SyncLinkedStack[T]) IsNotEmpty() bool {
5858
return x.stack.IsNotEmpty()
5959
}
6060

61-
func (x *SyncLinkedStack[T]) Len() int {
61+
func (x *SyncLinkedStack[T]) Size() int {
6262
x.lock.RLock()
6363
defer x.lock.RLock()
64-
return x.stack.Len()
64+
return x.stack.Size()
6565
}
6666

6767
func (x *SyncLinkedStack[T]) Clear() error {

‎sync_max_stack.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ func (x *SyncMaxStack[T]) IsNotEmpty() bool {
5858
return x.stack.IsNotEmpty()
5959
}
6060

61-
func (x *SyncMaxStack[T]) Len() int {
61+
func (x *SyncMaxStack[T]) Size() int {
6262
x.lock.RLock()
6363
defer x.lock.RLock()
64-
return x.stack.Len()
64+
return x.stack.Size()
6565
}
6666

6767
func (x *SyncMaxStack[T]) Clear() error {

‎sync_min_stack.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ func (x *SyncMinStack[T]) IsNotEmpty() bool {
5858
return x.stack.IsNotEmpty()
5959
}
6060

61-
func (x *SyncMinStack[T]) Len() int {
61+
func (x *SyncMinStack[T]) Size() int {
6262
x.lock.RLock()
6363
defer x.lock.RLock()
64-
return x.stack.Len()
64+
return x.stack.Size()
6565
}
6666

6767
func (x *SyncMinStack[T]) Clear() error {

‎sync_min_stack_test.go

+19
Original file line numberDiff line numberDiff line change
@@ -1 +1,20 @@
11
package stack
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
func TestSyncMinStack(t *testing.T) {
9+
10+
stack := NewSyncMinStack[int](func(a int, b int) int {
11+
return a - b
12+
})
13+
14+
stack.Push(3)
15+
stack.Push(7)
16+
stack.Push(9)
17+
18+
fmt.Println(stack.GetMin())
19+
20+
}

0 commit comments

Comments
 (0)
Please sign in to comment.