#

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

实现该结构,要求有三种方法:

  • 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

使用示例:

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
上次更新: 10/2/2023,