type stack struct {
nums []int
}
//
type queue struct {
s1 *stack
s2 *stack
}
//初始化栈
func newStack() *stack {
return &stack{
nums: []int{},
}
}
//初始化队列
func newQueue() *queue {
return &queue{
s1: newStack(),
s2: newStack(),
}
}
//栈的操作
func (s *stack) push(n int) {
s.nums = append(s.nums, n)
}
//后进先出
func (s *stack) pop() int {
if s.isEmpty() {
return -1
}
var res = s.nums[len(s.nums)-1] //取出最后一个
s.nums = s.nums[:len(s.nums)-1]
return res
}
func (s *stack) isEmpty() bool {
if len(s.nums) == 0 {
return true
}
return false
}
//入队 数据放入s1中
func (q *queue) push(n int) {
q.s1.push(n)
}
//出队 s2中栈顶值就是队列第一个值
func (q *queue) pop() int {
if q.s2.isEmpty() {
for !q.s1.isEmpty() {
q.s2.push(q.s1.pop()) //把所有s1值取出,放入s2中
}
}
return q.s2.pop()
}
//返回队列中第一个值
func (q *queue) Get() int {
if q.s2.isEmpty() { //检查s2是否空
if q.s1.isEmpty() { //检查s1是否空
return -1 //若s1、s2都空
}
return q.s1.nums[0] //若s2空,s1不空
}
return q.s2.nums[len(q.s2.nums)-1]//若s2不空
}