Skip to content

Commit 35f6967

Browse files
committed
Add golang implementation for Deque
1 parent 62fde88 commit 35f6967

File tree

2 files changed

+65
-1
lines changed

2 files changed

+65
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1713,7 +1713,7 @@ Com o objetivo de alcançar uma abrangência maior e encorajar mais pessoas a co
17131713
</a>
17141714
</td>
17151715
<td> <!-- Go -->
1716-
<a href="./CONTRIBUTING.md">
1716+
<a href="./src/go/deque.go">
17171717
<img align="center" height="25" src="https://cdn.jsdelivr.net/gh/devicons/devicon/icons/github/github-original.svg" />
17181718
</a>
17191719
</td>

src/go/deque.go

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import (
2+
"testing"
3+
"github.com/stretchr/testify/assert"
4+
)
5+
6+
type Deque struct {
7+
Store []int
8+
}
9+
10+
// Time complexity: O(1)
11+
func (deque *Deque) RPush(element int) {
12+
deque.Store = append(deque.Store, element)
13+
}
14+
15+
// Time complexity: O(n)
16+
func (deque *Deque) LPush(element int) {
17+
deque.Store = append([]int{element}, deque.Store...)
18+
}
19+
20+
// Time complexity: O(1)
21+
func (deque *Deque) RPop() *int {
22+
if len(deque.Store) == 0 {
23+
return nil
24+
}
25+
26+
element := deque.Store[len(deque.Store) - 1]
27+
deque.Store = deque.Store[:len(deque.Store) - 1]
28+
29+
return &element
30+
}
31+
32+
// Time complexity: O(n)
33+
func (deque *Deque) LPop() *int {
34+
if len(deque.Store) == 0 {
35+
return nil
36+
}
37+
38+
element := deque.Store[0]
39+
deque.Store = deque.Store[1:]
40+
41+
return &element
42+
}
43+
44+
func TestDeque(t *testing.T) {
45+
deque := Deque{}
46+
47+
deque.RPush(1)
48+
deque.RPush(2)
49+
deque.RPush(3)
50+
51+
assert.Equal(t, 3, *deque.RPop())
52+
assert.Equal(t, 2, *deque.RPop())
53+
assert.Equal(t, 1, *deque.RPop())
54+
assert.Nil(t, deque.RPop())
55+
56+
deque.LPush(1)
57+
deque.LPush(2)
58+
deque.LPush(3)
59+
60+
assert.Equal(t, 1, *deque.RPop())
61+
assert.Equal(t, 2, *deque.RPop())
62+
assert.Equal(t, 3, *deque.RPop())
63+
assert.Nil(t, deque.RPop())
64+
}

0 commit comments

Comments
 (0)