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 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| package main
const maxSize = 10
type Deque struct { leftHead int rightHead int size int arr [maxSize]int }
func (d *Deque) isEmpty() bool { return d.size == 0 }
func (d *Deque) isFull() bool { if d.size == len(d.arr) { return true } return false }
func (d *Deque) pre(position int) int { if position == 0 { return len(d.arr) - 1 } return position - 1 }
func (d *Deque) next(position int) int { if position == len(d.arr)-1 { return 0 } return position + 1 }
func (d *Deque) LeftInsert(val int) bool { if d.isFull() { return false } if d.isEmpty() { d.rightHead = d.next(d.rightHead) } d.arr[d.leftHead] = val d.size++ d.leftHead = d.pre(d.leftHead) return true }
func (d *Deque) RightInsert(val int) bool { if d.isFull() { return false } if d.isEmpty() { d.leftHead = d.pre(d.leftHead) } d.arr[d.rightHead] = val d.size++ d.rightHead = d.next(d.rightHead) return true }
func (d *Deque) LeftDelete() (int, bool) { if d.isEmpty() { return 0, false } d.leftHead = d.next(d.leftHead) if d.isEmpty() { d.rightHead = d.pre(d.rightHead) } val := d.arr[d.leftHead] d.size-- return val, true }
func (d *Deque) RightDelete() (int, bool) { if d.isEmpty() { return 0, false } d.rightHead = d.pre(d.rightHead) if d.isEmpty() { d.leftHead = d.next(d.leftHead) } val := d.arr[d.rightHead] d.size-- return val, true }
var deque = Deque{ leftHead: 0, rightHead: 0, arr: [maxSize]int{}, }
|