# 栈
栈结构如下所示,每次添加元素只能往顶部添加,取元素也只能从顶部先取元素。

实现该结构,要求有三种方法:
push向顶部添加元素pop弹出顶部元素IsEmpty判断栈是否为空
# 代码实现
双端队列实现栈
package stack
func NewStack() Stack {
return Stack{
doubleQueue: &queue.DoubuleQueue{},
}
}
type Stack struct {
doubleQueue *queue.DoubuleQueue
}
func (s *Stack) Push(value interface{}) {
s.doubleQueue.AddFromHead(value)
}
func (s *Stack) Pop() interface{} {
return s.doubleQueue.PopFromHead()
}
func (s *Stack) IsEmpty() bool {
return s.doubleQueue.IsEmpty()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
使用示例:
package stack
import (
"fmt"
"testing"
)
func TestStack(t *testing.T) {
s := NewStack()
s.Push("1")
s.Push("4")
s.Push("18")
s.Push("19")
for !s.IsEmpty() {
fmt.Println(s.Pop())
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17