210 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			210 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: queue | ||
|  | --- | ||
|  | 
 | ||
|  | ## Queues
 | ||
|  | 
 | ||
|  | `queue` is one of the most used containers in C++. A container is a data structure that stores a collection of objects, some in order, some not. All containers have a different set of functions that allow you to access an object(s) in that collection. | ||
|  | 
 | ||
|  | `std::queue` is part of the C++ standard library (hence the prefix `std::`) and allows you to store data in First In First Out (FIFO) order. NOTE: **All objects within a queue must be of the same data type** | ||
|  | 
 | ||
|  | The data type you store within a queue goes within angle brackets next to the queue keyword. For example, if you would like to store a collection of integers the queue would be `std::queue<int> queue_name` | ||
|  | 
 | ||
|  | ### Queue LIFO Explanation
 | ||
|  | 
 | ||
|  | `queue` allows us to push/enqueue and pop/dequeue in specific order. **Push** means inserting an object at the front of the queue. **Pop** means pulling out the "oldest" object from end of the queue. So when you push it is at the front and when you pop you extract the oldest element. | ||
|  | 
 | ||
|  |  | ||
|  | 
 | ||
|  | ### Queue Operations
 | ||
|  | 
 | ||
|  | The queue container supports the following operations:    | ||
|  |   - push (enqueue) | ||
|  |   - pop (dequeue) | ||
|  |   - empty | ||
|  |   - size | ||
|  |   - front | ||
|  |   - back | ||
|  |    | ||
|  | #### Push
 | ||
|  | 
 | ||
|  | Allows you to inserts a new element at the end of the queue, after its current last element. | ||
|  | 
 | ||
|  | ```cpp | ||
|  | //Push operation in Queue | ||
|  | #include <iostream>       // std::cout
 | ||
|  | #include <queue>          // std::queue
 | ||
|  | 
 | ||
|  | int main () | ||
|  | { | ||
|  |   std::queue<int> q; | ||
|  | 
 | ||
|  |   q.push(1);    //Pushing 1 at front of the queue | ||
|  |   q.push(2);    //Pushing 2 at front of the queue | ||
|  |    | ||
|  |   return 0; | ||
|  | } | ||
|  | ``` | ||
|  | 
 | ||
|  | #### Front
 | ||
|  | 
 | ||
|  | Allows you to access the next element in the queue without removing it. | ||
|  | The next element is the "oldest" element in the queue. | ||
|  | 
 | ||
|  | ```cpp | ||
|  | //Front operation in Queue | ||
|  | #include <iostream>       // std::cout
 | ||
|  | #include <queue>          // std::queue
 | ||
|  | 
 | ||
|  | int main () | ||
|  | { | ||
|  |   std::queue<int> q; | ||
|  | 
 | ||
|  |   q.push(1);    //Pushing 1 at front of the queue | ||
|  |   q.push(2);    //Pushing 2 at front of the queue | ||
|  |      | ||
|  |   std::cout<<q.front()<<'\n';     //Accessing the front of the queue | ||
|  |   std::cout<<q.front()<<'\n';     //Accessing the front of the queue | ||
|  |    | ||
|  |   return 0; | ||
|  | } | ||
|  | ``` | ||
|  |      | ||
|  |     Output: | ||
|  |     1 | ||
|  |     1 | ||
|  | 
 | ||
|  | #### Pop
 | ||
|  | 
 | ||
|  | Allows you to remove the next element in the queue, effectively reducing its size by one. | ||
|  | The element removed is the "oldest" element. | ||
|  | 
 | ||
|  | ```cpp | ||
|  | //Pop operation in Queue | ||
|  | #include <iostream>       // std::cout
 | ||
|  | #include <queue>          // std::queue
 | ||
|  | 
 | ||
|  | int main () | ||
|  | { | ||
|  |   std::queue<int> q; | ||
|  | 
 | ||
|  |   q.push(1);    //Pushing 1 at front of the queue | ||
|  |   q.push(2);    //Pushing 2 at front of the queue | ||
|  |      | ||
|  |   std::cout<<q.front()<<'\n';     //Accessing the front of the queue | ||
|  |   q.pop();                        //Removing the oldest element  | ||
|  |   std::cout<<q.front()<<'\n';     //Accessing the front of the queue | ||
|  |   q.pop();                        //Removing the oldest element | ||
|  |    | ||
|  |   return 0; | ||
|  | } | ||
|  | ``` | ||
|  |      | ||
|  |     Output: | ||
|  |     1 | ||
|  |     2 | ||
|  | 
 | ||
|  | #### Size
 | ||
|  | 
 | ||
|  | Returns the number of elements in the `queue`. | ||
|  | 
 | ||
|  | ```cpp | ||
|  | //Size operation in Queue | ||
|  | #include <iostream>       // std::cout
 | ||
|  | #include <queue>          // std::queue
 | ||
|  | 
 | ||
|  | int main () | ||
|  | { | ||
|  |   std::queue<int> q; | ||
|  | 
 | ||
|  |   q.push(1);    //Pushing 1 at front of the queue | ||
|  |   q.push(2);    //Pushing 2 at front of the queue | ||
|  |      | ||
|  |   std::cout<<q.size()<<'\n';     //Accessing the front of the queue | ||
|  |   q.pop();                        //Removing the oldest element  | ||
|  |   std::cout<<q.size()<<'\n';     //Accessing the front of the queue | ||
|  |   q.pop();                        //Removing the oldest element  | ||
|  |   std::cout<<q.size()<<'\n';     //Accessing the front of the queue | ||
|  |    | ||
|  |   return 0; | ||
|  | } | ||
|  | 
 | ||
|  | ``` | ||
|  |      | ||
|  |     Output: | ||
|  |     2 | ||
|  |     1 | ||
|  |     0 | ||
|  | 
 | ||
|  | #### Empty
 | ||
|  | 
 | ||
|  | Returns whether the `queue` is empty ,i.e. whether your queue size is zero. | ||
|  | It returns `true` if queue's size 0 else returns `false`  | ||
|  | 
 | ||
|  | ```cpp//Empty operation in Queue | ||
|  | #include <iostream>       // std::cout
 | ||
|  | #include <queue>          // std::stack
 | ||
|  | 
 | ||
|  | int main () | ||
|  | { | ||
|  |   std::queue<int> q; | ||
|  | 
 | ||
|  |   q.push(1); | ||
|  |   q.push(2); | ||
|  |    | ||
|  |   while(q.empty() != true){ | ||
|  |       std::cout<<q.front()<<'\n'; | ||
|  |       q.pop(); | ||
|  |   } | ||
|  |    | ||
|  |   std::cout<<"Out of loop"<<'\n'; | ||
|  |   return 0; | ||
|  | } | ||
|  | ``` | ||
|  |      | ||
|  |     Output: | ||
|  |     1 | ||
|  |     2 | ||
|  |     Out of loop | ||
|  | 
 | ||
|  | #### Back
 | ||
|  | 
 | ||
|  | Allows you to access the last element in the queue without removing it. | ||
|  | The next element is the "newest" element in the queue. | ||
|  | 
 | ||
|  | ```cpp | ||
|  | //Back operation in Queue | ||
|  | #include <iostream>       // std::cout
 | ||
|  | #include <queue>          // std::queue
 | ||
|  | 
 | ||
|  | int main () | ||
|  | { | ||
|  |   std::queue<int> q; | ||
|  | 
 | ||
|  |   q.push(1);    //Pushing 1 at front of the queue | ||
|  |   q.push(2);    //Pushing 2 at front of the queue | ||
|  |      | ||
|  |   std::cout<<q.back()<<'\n';     //Accessing the back of the queue | ||
|  |   std::cout<<q.back()<<'\n';     //Accessing the back of the queue | ||
|  |    | ||
|  |   return 0; | ||
|  | } | ||
|  | ``` | ||
|  |      | ||
|  |     Output: | ||
|  |     2 | ||
|  |     2 | ||
|  |      | ||
|  | 
 | ||
|  | ### For More Resources:
 | ||
|  | http://www.cplusplus.com/reference/queue/queue/ | ||
|  | 
 | ||
|  | ### Citations:
 | ||
|  | Image Courtesy: https://en.wikipedia.org/wiki/FIFO_(computing_and_electronics)  | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 |