Queue
A.First Edition
This is my first edition of a simple queue based on array with very simple and limited methods.
A queue is an array with start and end points such that all elements between start and end is the elements of
the queue. (redundant?)
Very simple, that I only use a counter to verify if queue is full or empty.
1. bool Queue::enqueue(int data)
Add new data into queue except that I check all elements in queue to make sure there is no repetition of data.
2. bool Queue::dequeue(int& data)
Retrieve data from start position and in order to avoid remove data from empty queue, I make it return type of
bool. Then data is passed by reference.
C.Further improvement
1. Its purpose is for my BFS with array. So far it is enough.
กก
#include <iostream> using namespace std; const int MaxQueueNumber = 4000; class Queue { private: int lst[MaxQueueNumber]; int start; int end; int counter; bool isRepeat(int data); int next(int index); public: void onVisitData(int data); bool enqueue(int data); bool dequeue(int& data); int queueCount(){return counter;} Queue(); }; int main() { Queue Q; int data; for (int i=0; i<400; i++) { Q.enqueue(i); cout<<Q.queueCount()<<endl; } for (i=0; i<401; i++) { Q.dequeue(data); cout<<"data is"<<data<<endl; cout<<Q.queueCount()<<endl; } return 0; } Queue::Queue() { start = 0; end = start; counter =0; } bool Queue::dequeue(int& data) { if (counter==0) { cout<<"Queue is empty!"<<endl; return false; } data = lst[start]; start++; if (start==MaxQueueNumber) { start=0; } counter--; return true; } bool Queue::enqueue(int data) { if (counter==MaxQueueNumber) { cout<<"Queue is full!"<<endl; return false; } if (!isRepeat(data)) { lst[end]=data; end++; if (end==MaxQueueNumber) { end=0; } counter++; return true; } return false; } int Queue::next(int index) { if (end>start)//normal { if (index<end-1&&index>=start) { return index+1; } } else { if (end<start)// { if (index>=start&&index<MaxQueueNumber)// { if (index+1==MaxQueueNumber) { return 0; } else { return index+1; } } else { if (index<end-1&&index>=0) { return index+1; } } } } return -1; } bool Queue::isRepeat(int data) { int index=start; while(index!=-1) { if (lst[index]==data) { return true; } index = next(index); } return false; }