**What Is Implementation of Stack in Data Structure?**

A stack is a fundamental data structure that follows the Last-In-First-Out (LIFO) principle. In simple terms, it means that the last element added to the stack will be the first one to be removed. This concept is similar to a stack of books, where you can only remove the topmost book.

## Implementation of Stack

In programming, a stack can be implemented using various data structures. The two most common implementations are:

### 1. Array-based Implementation

This implementation uses an array to store the elements of the stack. The top of the stack is represented by an index variable that points to the last inserted element in the array.

__Algorithm:__

- Create an array with a fixed size to hold the elements.
- Initialize a variable, ‘top’, to -1 (indicating an empty stack).
- To push an element onto the stack:
- Check if ‘top’ is equal to the maximum size of the array – 1 (indicating a full stack). If it is, display an overflow message.
- If not, increment ‘top’ by 1 and insert the element at index ‘top’ in the array.

- To pop an element from the stack:
- Check if ‘top’ is equal to -1 (indicating an empty stack). If it is, display an underflow message.
- If not, remove and return the element at index ‘top’, then decrement ‘top’ by 1.

- To peek at the top element of the stack (without removing it), return the element at index ‘top’.

### 2. Linked List-based Implementation

This implementation uses a linked list to store the elements of the stack. Each node in the linked list contains the value of an element and a reference to the next node.

__Algorithm:__

- Create an empty linked list.
- To push an element onto the stack:
- Create a new node with the given element as its value.
- Set the ‘next’ reference of the new node to point to the current top node.
- Update the top pointer to point to the new node.

- To pop an element from the stack:
- Check if the top pointer is null (indicating an empty stack).
- If not, store the value of the current top node in a variable, update the top pointer to point to its next node, and return the stored value.

- To peek at the top element of the stack (without removing it), return the value of the current top node.

Both implementations have their pros and cons. The array-based implementation offers constant-time access to any element in the stack but requires a fixed size. In contrast, while linked list-based implementation doesn’t have a size limitation, it requires additional memory for storing references between nodes.

In conclusion, understanding how stacks are implemented using arrays or linked lists is crucial for efficient data structure manipulation. It allows you to leverage the power of stacks in solving various algorithmic problems.