diff --git a/queues/README.md b/queues/README.md index a8df0f15..c32f8ee5 100644 --- a/queues/README.md +++ b/queues/README.md @@ -3,3 +3,4 @@ ### C or C++ 1. [Queue using linked list](c-or-cpp/queue-linked-list.cpp) +2. [Circular Queue using linked list](c-or-cpp/circular-queue-linked-list.cpp) diff --git a/queues/c-or-cpp/circular-queue-linked-list.cpp b/queues/c-or-cpp/circular-queue-linked-list.cpp new file mode 100644 index 00000000..08d2c58d --- /dev/null +++ b/queues/c-or-cpp/circular-queue-linked-list.cpp @@ -0,0 +1,109 @@ +// Content: Circular Queue using linked list +// Author: Tawfik Yasser +// Date: Mon, 8 Mar 2021 +#include +using namespace std; +class Node +{ +public: + int data; + Node *next; + Node() {} +}; +class QueueLL +{ +private: + Node *front; + Node *rear; + int length; +public: + QueueLL() + { + front = rear = NULL; length = 0; + } + //Function to add new element in the queue + void enqueue(int value) + { + Node *newNode = new Node(); + newNode->data = value; + newNode->next = NULL; + if(rear == NULL) + { + front = rear = newNode; + rear->next = front; + } + else + { + rear->next = newNode; + rear = newNode; + rear->next = front; + } + length++; + } + //Function to remove element from the queue + void dequeue() + { + Node *temp = front; + if(front == NULL && rear == NULL){ + cout<<"Empty Queue"<next; + rear->next = front; + delete temp; + } + length--; + if(length < 0 ) + length = 0; + } + //Function returns the first element in the queue + void peek() + { + if(front == NULL && rear == NULL){ + cout<<"Empty Queue"<data<next != front) + { + cout<<"[ "<data<<" ] "; + temp = temp->next; + } + cout<<"[ "<data<<" ] "; + } + } + int _size() + { + return length; + } +}; +int main() +{ + QueueLL qll; + qll.enqueue(5); + qll.enqueue(3); + qll.enqueue(-2); + qll.print(); + cout<