diff --git a/Queue.h b/Queue.h new file mode 100644 index 0000000..f647014 --- /dev/null +++ b/Queue.h @@ -0,0 +1,82 @@ +template +class Queue { + T *data; + int nextIndex; + int frontIndex; + int size; + int capacity; + + public : + + Queue() { + data = new T[5]; + nextIndex = 0; + frontIndex = -1; + size = 0; + capacity = 5; + } + + int getSize() { + return size; + } + + bool isEmpty() { + return size == 0; + } + + void enqueue(T element) { + if(size == capacity) { + // Queue full + // return; + T *temp = data; + data = new T[2 * capacity]; + int j = 0; + for(int i = frontIndex; i < capacity; i++) { + data[j++] = temp[i]; + } + for(int i = 0; i < frontIndex; i++) { + data[j++] = temp[i]; + } + delete [] temp; + frontIndex = 0; + nextIndex = j; + capacity *= 2; + } + data[nextIndex] = element; + size++; + nextIndex = (nextIndex + 1) % capacity; + if(frontIndex == -1) { + frontIndex = 0; + } + } + + T front() { + if(frontIndex == -1) { + // Queue empty + return 0; + } + return data[frontIndex]; + } + + T dequeue() { + if(frontIndex == -1) { + // Queue empty + return 0; + } + T ans = data[frontIndex]; + frontIndex = (frontIndex + 1) % capacity; + size--; + if(size == 0) { + frontIndex = -1; + nextIndex = 0; + } + return ans; + } + + + + + + + +}; diff --git a/QueueUse.cpp b/QueueUse.cpp new file mode 100644 index 0000000..d152dd6 --- /dev/null +++ b/QueueUse.cpp @@ -0,0 +1,22 @@ +#include +using namespace std; +#include "Queue.h" + +int main() { + Queue q; + cout << q.getSize() << endl; + + q.enqueue(10); + q.enqueue(20); + q.enqueue(30); + q.enqueue(40); + q.enqueue(50); + q.enqueue(60); + + cout << q.front() << endl; + + while(!q.isEmpty()) { + cout << q.dequeue() << endl; + } +} +