1 class Queue 2 { 3 public: 4 Queue(int len = 10); 5 Queue(const Queue& src); 6 Queue& operator=(const Queue& src); 7 ~Queue(); 8 9 void Push(int val); 10 void Pop(); 11 int getHead(); 12 13 bool isEmpty(); 14 bool isFull(); 15 void show(); 16 private: 17 int* _arr; 18 int _head; 19 int _tail; 20 int _len; 21 }; 22 23 Queue::Queue(int len) : _head(0), _tail(0) 24 { 25 if (len < 10) 26 { 27 _len = 10; 28 } 29 _len = len; 30 _arr = new int[len]; 31 } 32 33 Queue::Queue(const Queue&ob) : _head(ob._head), _tail(ob._tail) 34 { 35 _arr = new int[ob._len]; 36 _len = ob._len; 37 for (int j = _head; j != _tail; j = (j + 1) % _len) 38 { 39 _arr[j] = ob._arr[j]; 40 } 41 } 42 43 Queue& Queue::operator=(const Queue& src) 44 { 45 if (this == &src) 46 { 47 return *this; 48 } 49 if (_arr == nullptr) 50 { 51 delete[]_arr; 52 } 53 _arr = new int[src._len]; 54 _len = src._len; 55 _head = src._head; 56 _tail = src._tail; 57 for (int j = _head; j != _tail; j = (j+1)%_len) 58 { 59 _arr[j] = src._arr[j]; 60 } 61 return *this; 62 63 } 64 65 Queue::~Queue() 66 { 67 if(_arr ) 68 delete[]_arr; 69 _arr = nullptr; 70 _head = 0; 71 _tail = 0; 72 _len = 0; 73 } 74 bool Queue::isEmpty() 75 { 76 return _head == _tail; 77 } 78 79 bool Queue::isFull() 80 { 81 return (_tail + 1) % _len == _head; 82 } 83 84 void Queue::Push(int val) 85 { 86 if (!isFull()) 87 { 88 _arr[_tail] = val; 89 _tail = (_tail + 1) % _len; 90 } 91 } 92 93 void Queue::Pop() 94 { 95 if (!isEmpty()) 96 { 97 _head = (_head + 1) % _len; 98 } 99 } 100 101 int Queue::getHead() 102 { 103 if (!isEmpty()) 104 { 105 return _arr[_head]; 106 } 107 } 108 109 void Queue::show() 110 { 111 for (int j = _head; j != _tail; j = (j + 1) % _len) 112 cout << j << " "; 113 } 114 115 int main() { 116 117 int arr[] = { 123,32,7,25,453,791,66,432,1245,9,770}; 118 Queue q; 119 for (int j = 0; j < 9; ++j) 120 { 121 q.Push(j); 122 } 123 q.show(); 124 cout << endl; 125 for (int j = 0; j < 4; ++j) 126 { 127 cout<<q.getHead()<<endl; 128 q.Pop(); 129 } 130 q.show(); 131 return 0; 132 133 }