# Design and Implement Special Stack Data Structure

## Introduction

A basic data structure in software engineering and computer science is the stack. The last piece added to the stack is the first one withdrawn, according to the Last-In-First-Out (LIFO) principle, which is followed by a stack, which is a linear data structure. Even while push, pop, and peek are a stack's three basic actions, there are situations when you need the more specialized capability to tackle particular challenges effectively. This article will examine the idea of a "special stack" and go into its creation and application, concentrating on a popular special stack called a "Min Stack."

### Fundamentals of a Stack

Let's quickly review the essential features and functions of a conventional stack before getting into custom stacks:

• Push: Pushing something up to the top of the stack adds it.
• Pop: The top element in the stack is eliminated with this action.
• Peek (or Top): This function lets you see what's at the top without taking it off.

Stacks are employed in many different methods, including expression parsing, keeping track of function calls (the call stack), and problem-solving where a last-in-first-out order is crucial.

### Special Stacks

A special stack is a variant of the ordinary stack data structure that goes beyond the fundamental operations to allow for extra operations or to enforce particular limitations. The Min Stack, which makes it possible to quickly determine the lowest element in the stack at any given time, is one of the most widely used special stacks.

### Design of a Min Stack

Data Structures

Two primary data structures are required to implement a Min Stack:

1. Main Stack: The primary items are kept in the main stack. This stack is used for the common stack operations (push, pop, and peek).
2. Auxiliary Stack: The purpose of the auxiliary stack is to maintain track of the main stack's minimal items. The auxiliary stack will always hold the current minimum element and will always be the same size as the main stack.

Functions

Push

The following actions are taken when adding a new element to the stack:

• To the main stack, add the element.
• Verify whether the element is less than or equal to the top element of the auxiliary stack, which is the current minimum.
• Should it be, additionally place the element on the auxiliary stack.

Pop

Pop To remove an element from the stack, take the following actions:

• Remove the component from the primary stack.
• Verify whether the part was the bare minimum. Pop the top element from the auxiliary stack as well if that's the case.

Peek (Top)

• This action retrieves the top element from the main stack and stays the same.

Get Minimum

• This action takes the auxiliary stack's minimum element and obtains it. Without having to look through the full stack, it enables you to locate the least element in the main stack quickly.

Code

Output: