2个栈实现队列功能
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不空 }
初玩博客园,欢迎各位大神指正