1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| type DequeStack struct { pushDeque *Deque popDeque *Deque flag bool }
func (d *DequeStack) exchange(from, to *Deque) { to.Clean() for true { if v, ok := from.Pop(); ok { to.Push(v) } else { break } } d.flag=!d.flag }
func (d *DequeStack) Push(val int) bool { if !d.flag{ d.exchange(d.popDeque, d.pushDeque) } return d.pushDeque.Push(val) }
func (d *DequeStack) Pop() (int, bool){ if d.flag{ d.exchange(d.pushDeque, d.popDeque) } return d.popDeque.Pop() }
type Deque struct { arr [maxSize]int head int tail int size int }
func (d *Deque) next(position int) int { if position == len(d.arr)-1 { return 0 } return position + 1 }
func (d *Deque) isFull() bool { return d.size == len(d.arr) }
func (d *Deque) isEmpty() bool { return d.size == 0 }
func (d *Deque) Push(val int) bool { if d.isFull() { return false } d.arr[d.tail] = val d.tail = d.next(d.tail) d.size++ return true }
func (d *Deque) Pop() (int, bool) { if d.isEmpty() { return 0, false } val := d.arr[d.head] d.head = d.next(d.head) d.size-- return val, true }
func (d *Deque) Clean() { d.head = 0 d.tail = 0 d.size = 0 }
|