There are many data structures like arrays, linked lists, and trees that are used to organise the data in a particular manner.

A stack and a queue are two other data structures that are used to organise data. Both of them are linear data structures, which means they store and retrieve the elements in a sequencial manner from the structure when required.

Stack follows the LIFO (Last In First Out) order to store the elements whereas the Queue follows the FIFO (First In First Out) order to store the elements in the memory.

We’ll take a deepr look at the difference between stack and queue.

## Takeaways

- Stack and Queue are non-primitive, linear data structures.
- Difference between Stack and Queue

## What is a Stack Data Structure?

A stack is a non-primitive, linear data structure that stores the elements in a LIFO (Last In First Out) order. However, the stack can only be used to store similar kinds of elements, that is, those that have the same data types.

**An example** of a stack data structure could be a pile of books that are kept on a table. You can imagine how the books would be placed on top of each other. However, the topmost book, which would have been kept at last, is the one that will be removed first from the pile. Therefore, it follows the Last In First Out order.

There are multiple operations that are performed on the stack elements like insertion, deletion, finding the peek element, and determining whether the stack is empty or not. The insertion in a stack is called a push, whereas the deletion in a stack is called a pop.

However, the insertion and deletion from the stack could be done from one end only. It has a single pointer called top which points to the topmost element of the stack and insertion as well as deletion is performed by manipulating the top pointer only. Insertion and deletion in the stack have a time complexity of O(1).

You can refer to the article Stacks in Data Structure for more information about stacks.

## What is a Queue Data Structure?

A queue is also a non-primitive, linear data structure that stores elements in a sequential manner. However, the queue data structure follows a FIFO (First In First Out) order to store and retrieve elements from the memory. It can also only store similar kinds of elements in the queue.

An example of a queue can be a line or a queue in a bank in which the person who comes first will be served first. Therefore, it follows the FIFO order to process the elements.

Similar to Stacks, they are also used to perform insertions, and deletions, find the peak element, and check whether the queue is empty or not. However, insertion into a queue is called enqueue, whereas deletion from a queue is called dequeue.

There are two pointers in a queue, known as the rear and front. The rear points to the last element, whereas the front points to the first element that is inserted into the queue. Therefore, an element is inserted into a queue using the rear pointer, whereas the element is deleted using the front pointer. The time complexity for insertion and deletion in the queue is O(1).

However, there are other types of queue that give the facility to insert and delete from both ends of the queue.

## Difference Between Stack and Queue Data Structures

Parameters | Stack | Queue |
---|---|---|

Working Principle | It follows the LIFO (Last In First Out) order to store the elements, which means the element that is inserted last will come out first. | It follows the FIFO (First In First Out) order to store the elements, which means the element that is inserted first will come out first. |

Pointers | It has only one end, known as the top, at which both insertion and deletion take place. | It has two ends, known as the rear and front, which are used for insertion and deletion. The rear end is used to insert the elements, whereas the front end is used to delete the elements from the queue. |

Operations | The insertion operation is known as push and the deletion operation is known as pop. | The insertion operation is known as enqueue and the deletion operation is known as dequeue. |

Empty Condition | The condition for checking whether the stack is empty is top ==-1 as -1 refers to no element in the stack. | The condition for checking whether the queue is empty is front == -1 |

Full Condition | The condition for checking if the stack is full is top==max-1 as max refers to the maximum number of elements that can be in the stack. | The condition for checking if the queue is full is rear==max-1 as max refers to the maximum number of elements that can be in the queue. |

Variants | There are no other variants or types of the stack. | There are three types of queues known as circular, double-ended, and priority. |

Implementation | It has a simple implementation compared to queues as no two pointers are involved. | It has a complex implementation compared to stacks as two pointers front and rear are involved. |

Application | It is used to solve recursion-based problems. | It is used to solve sequential processing-based problems. |

Data Representation | Often implemented with arrays or linked lists. | Can also be implemented with arrays or doubly linked lists. |

Example | A real-life example of a stack can be the Undo/Redo operation in Word or Excel. | A real-life example of a queue can be an operating system process scheduling queues. |

Visualization | Stack can be visualized as a vertical collection. | Queue can be visualized as a horizontal collection. |

## Conclusion

- A stack follows a LIFO (Last In First Out) order, whereas a queue follows a FIFO (First In First Out) order for storing the elements.
- A stack uses one end known as a top for insertion and deletion whereas a queue uses two ends front and rear for insertion and deletion.
- Both stacks and queues store only similar kinds of elements.
- The insertion operation in a stack is known as push, whereas a deletion operation is known as pop.
- The insertion operation in a queue is known as enqueue, whereas the deletion operation is dequeue.