File tree 14 files changed +137
-28
lines changed
14 files changed +137
-28
lines changed Original file line number Diff line number Diff line change @@ -84,7 +84,7 @@ IsNotEmpty() bool
84
84
## 栈中元素个数
85
85
86
86
```
87
- Len () int
87
+ Size () int
88
88
```
89
89
90
90
Original file line number Diff line number Diff line change @@ -40,7 +40,8 @@ func (x *ArrayStack[T]) Pop() T {
40
40
41
41
func (x * ArrayStack [T ]) PopE () (T , error ) {
42
42
if x .topIndex == 0 {
43
- return nil , ErrStackEmpty
43
+ var zero T
44
+ return zero , ErrStackEmpty
44
45
}
45
46
value := x .slice [x .topIndex ]
46
47
x .topIndex --
@@ -54,7 +55,8 @@ func (x *ArrayStack[T]) Peek() T {
54
55
55
56
func (x * ArrayStack [T ]) PeekE () (T , error ) {
56
57
if x .topIndex == 0 {
57
- return nil , ErrStackEmpty
58
+ var zero T
59
+ return zero , ErrStackEmpty
58
60
}
59
61
return x .slice [x .topIndex ], nil
60
62
}
@@ -67,7 +69,7 @@ func (x *ArrayStack[T]) IsNotEmpty() bool {
67
69
return x .topIndex != 0
68
70
}
69
71
70
- func (x * ArrayStack [T ]) Len () int {
72
+ func (x * ArrayStack [T ]) Size () int {
71
73
return x .topIndex
72
74
}
73
75
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change 1
1
module github.com/CC11001100/go-stack
2
2
3
3
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
+ )
Original file line number Diff line number Diff line change
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 =
Original file line number Diff line number Diff line change @@ -36,13 +36,15 @@ func (x *LinkedStack[T]) Pop() T {
36
36
37
37
func (x * LinkedStack [T ]) PopE () (T , error ) {
38
38
if x .top == nil {
39
- return nil , ErrStackEmpty
39
+ var zero T
40
+ return zero , ErrStackEmpty
40
41
}
41
42
top := x .top
42
43
x .top = x .top .next
43
44
value := top .value
44
45
top .next = nil
45
- top .value = nil
46
+ var zero T
47
+ top .value = zero
46
48
x .ln --
47
49
return value , nil
48
50
}
@@ -54,7 +56,8 @@ func (x *LinkedStack[T]) Peek() T {
54
56
55
57
func (x * LinkedStack [T ]) PeekE () (T , error ) {
56
58
if x .top == nil {
57
- return nil , ErrStackEmpty
59
+ var zero T
60
+ return zero , ErrStackEmpty
58
61
}
59
62
return x .top .value , nil
60
63
}
@@ -67,7 +70,7 @@ func (x *LinkedStack[T]) IsNotEmpty() bool {
67
70
return x .top != nil
68
71
}
69
72
70
- func (x * LinkedStack [T ]) Len () int {
73
+ func (x * LinkedStack [T ]) Size () int {
71
74
return x .ln
72
75
}
73
76
Original file line number Diff line number Diff line change @@ -44,7 +44,8 @@ func (x *MaxStack[T]) Pop() T {
44
44
func (x * MaxStack [T ]) PopE () (T , error ) {
45
45
e , err := x .stack .PopE ()
46
46
if err != nil {
47
- return nil , err
47
+ var zero T
48
+ return zero , err
48
49
}
49
50
return e .value , nil
50
51
}
@@ -57,7 +58,8 @@ func (x *MaxStack[T]) Peek() T {
57
58
func (x * MaxStack [T ]) PeekE () (T , error ) {
58
59
e , err := x .stack .PeekE ()
59
60
if err != nil {
60
- return nil , err
61
+ var zero T
62
+ return zero , err
61
63
}
62
64
return e .value , nil
63
65
}
@@ -70,8 +72,8 @@ func (x *MaxStack[T]) IsNotEmpty() bool {
70
72
return x .stack .IsNotEmpty ()
71
73
}
72
74
73
- func (x * MaxStack [T ]) Len () int {
74
- return x .stack .Len ()
75
+ func (x * MaxStack [T ]) Size () int {
76
+ return x .stack .Size ()
75
77
}
76
78
77
79
func (x * MaxStack [T ]) Clear () error {
@@ -90,7 +92,8 @@ func (x *MaxStack[T]) GetMax() T {
90
92
func (x * MaxStack [T ]) GetMaxE () (T , error ) {
91
93
e , err := x .stack .PeekE ()
92
94
if err != nil {
93
- return nil , err
95
+ var zero T
96
+ return zero , err
94
97
}
95
98
return e .max , nil
96
99
}
Original file line number Diff line number Diff line change @@ -44,7 +44,8 @@ func (x *MinStack[T]) Pop() T {
44
44
func (x * MinStack [T ]) PopE () (T , error ) {
45
45
e , err := x .stack .PopE ()
46
46
if err != nil {
47
- return nil , err
47
+ var zero T
48
+ return zero , err
48
49
}
49
50
return e .value , nil
50
51
}
@@ -57,7 +58,8 @@ func (x *MinStack[T]) Peek() T {
57
58
func (x * MinStack [T ]) PeekE () (T , error ) {
58
59
e , err := x .stack .PeekE ()
59
60
if err != nil {
60
- return nil , err
61
+ var zero T
62
+ return zero , err
61
63
}
62
64
return e .value , nil
63
65
}
@@ -70,8 +72,8 @@ func (x *MinStack[T]) IsNotEmpty() bool {
70
72
return x .stack .IsNotEmpty ()
71
73
}
72
74
73
- func (x * MinStack [T ]) Len () int {
74
- return x .stack .Len ()
75
+ func (x * MinStack [T ]) Size () int {
76
+ return x .stack .Size ()
75
77
}
76
78
77
79
func (x * MinStack [T ]) Clear () error {
@@ -90,7 +92,8 @@ func (x *MinStack[T]) GetMin() T {
90
92
func (x * MinStack [T ]) GetMinE () (T , error ) {
91
93
e , err := x .stack .PeekE ()
92
94
if err != nil {
93
- return nil , err
95
+ var zero T
96
+ return zero , err
94
97
}
95
98
return e .min , nil
96
99
}
Original file line number Diff line number Diff line change @@ -21,8 +21,8 @@ type Stack[T any] interface {
21
21
// IsNotEmpty 栈是否不为空
22
22
IsNotEmpty () bool
23
23
24
- // Len 返回栈中元素的个数
25
- Len () int
24
+ // Size 返回栈中元素的个数
25
+ Size () int
26
26
27
27
// Clear 清空栈
28
28
Clear () error
Original file line number Diff line number Diff line change @@ -58,10 +58,10 @@ func (x *SyncArrayStack[T]) IsNotEmpty() bool {
58
58
return x .stack .IsNotEmpty ()
59
59
}
60
60
61
- func (x * SyncArrayStack [T ]) Len () int {
61
+ func (x * SyncArrayStack [T ]) Size () int {
62
62
x .lock .RLock ()
63
63
defer x .lock .RLock ()
64
- return x .stack .Len ()
64
+ return x .stack .Size ()
65
65
}
66
66
67
67
func (x * SyncArrayStack [T ]) Clear () error {
Original file line number Diff line number Diff line change @@ -58,10 +58,10 @@ func (x *SyncLinkedStack[T]) IsNotEmpty() bool {
58
58
return x .stack .IsNotEmpty ()
59
59
}
60
60
61
- func (x * SyncLinkedStack [T ]) Len () int {
61
+ func (x * SyncLinkedStack [T ]) Size () int {
62
62
x .lock .RLock ()
63
63
defer x .lock .RLock ()
64
- return x .stack .Len ()
64
+ return x .stack .Size ()
65
65
}
66
66
67
67
func (x * SyncLinkedStack [T ]) Clear () error {
Original file line number Diff line number Diff line change @@ -58,10 +58,10 @@ func (x *SyncMaxStack[T]) IsNotEmpty() bool {
58
58
return x .stack .IsNotEmpty ()
59
59
}
60
60
61
- func (x * SyncMaxStack [T ]) Len () int {
61
+ func (x * SyncMaxStack [T ]) Size () int {
62
62
x .lock .RLock ()
63
63
defer x .lock .RLock ()
64
- return x .stack .Len ()
64
+ return x .stack .Size ()
65
65
}
66
66
67
67
func (x * SyncMaxStack [T ]) Clear () error {
Original file line number Diff line number Diff line change @@ -58,10 +58,10 @@ func (x *SyncMinStack[T]) IsNotEmpty() bool {
58
58
return x .stack .IsNotEmpty ()
59
59
}
60
60
61
- func (x * SyncMinStack [T ]) Len () int {
61
+ func (x * SyncMinStack [T ]) Size () int {
62
62
x .lock .RLock ()
63
63
defer x .lock .RLock ()
64
- return x .stack .Len ()
64
+ return x .stack .Size ()
65
65
}
66
66
67
67
func (x * SyncMinStack [T ]) Clear () error {
Original file line number Diff line number Diff line change 1
1
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
+ }
You can’t perform that action at this time.
0 commit comments