Stack Abstract Data Type (ADT)
Definition
A Stack is a linear data structure that follows the Last-In, First-Out (LIFO) principle. This means the last element inserted (pushed) into the stack is the first element to be removed (popped) from it. A stack is modeled conceptually as a collection of elements accessible only at one end, called the "top" of the stack. Real-world analogies include a pile of plates or a stack of books, where elements can only be added or removed from the top.
Key Properties
- 
LIFO Order: The most recently added element is the first to be removed. 
- 
Single Access Point: Both insertion and removal operations occur at the "top." 
- 
Homogeneous Elements: All elements are of the same type. 
- 
Dynamic/Static Size: Can be implemented with a fixed or dynamic size. 
Fundamental Stack Operations
| Operation | Description | 
|---|---|
| push(x) | Inserts the element xonto the top of the stack. | 
| pop() | Removes and returns the element at the top of the stack. | 
| top()/peek() | Returns (without removing) the element at the top of the stack. | 
| isEmpty() | Checks whether the stack contains any elements. | 
| isFull() | Checks if the stack has reached its capacity (mainly for array-based stacks) | 
| size() | Returns the current number of elements in the stack. | 
| create() | Initializes a new, empty stack instance. | 
| destroy() | Deletes all elements of the stack, freeing resources. | 
Example
Suppose you perform the following operations on an empty stack:
- 
push(10) 
- 
push(20) 
- 
pop() — returns 20 
- 
push(30) 
- 
top() — returns 30 
At each step, only the topmost element can be accessed or modified.
Stack Implementation Strategies
- 
Array-Based: Uses a fixed-size array with a pointer (or index) to the top element. Simple and efficient for known, limited stack sizes, but constrained by the array's maximum capacity. 
- 
Linked List-Based: Each element is a node with a value and a reference to the next node. Allows dynamic resizing and is only limited by system memory. No "isFull()" unless implementing a max size. 
Error Conditions
- 
Stack Overflow: Attempting to push onto a full stack (for array-based implementations). 
- 
Stack Underflow: Attempting to pop or access the top of an empty stack. 
Real-World Applications
- 
Undo Mechanisms: Stacks keep track of actions for undo/redo functionality in software (e.g., text editors). 
- 
Function Call Stacks: Compilers/interpreters manage function calling and returns using stacks. 
- 
Expression Evaluation: In calculators, stacks evaluate arithmetic expressions and manage operator precedence. 
- 
Balancing Symbols: Used to validate properly nested expressions in code or text (e.g., parentheses, brackets). 
Summary Table
| Property | Value | 
|---|---|
| Order | LIFO (Last-In, First-Out) | 
| Access Point | Top only | 
| Common Operations | push, pop, top/peek, isEmpty, isFull, size, create, destroy | 
| Implementations | Array, Linked List | 
| Applications | Undo/redo, function calls, expression evaluation, balancing symbols | 
.png)
Join the conversation