A Stack is a linear data structure that keeps its elements stacked on each other. It uses LIFO (last-in-first-out) ordering in which the last pushed item to the stack is processed first.


A Stack is a linear data structure where elements are stacked on each other. It's like an array, but with a few restrictions:

  • You can't access items randomly by using their index.

  • You can only add an item to the end, and remove or retrieve the latest item.

The simplest way to think about stack structure is to imagine a deck of cards, or a stack of plates. You put a plate on top of another, and to access a plate in the middle you first need to get plates from the top.

A stack uses LIFO (last-in-first-out) ordering which means that the last pushed item to the stack is processed first (all previous items will need to wait until newer are processed).

Base Operations

When to use

  • Checking an opening/closing structure. For example, a task to detect balanced usage of opening and closing parentheses, brackets, and quotes. []()""([])

  • Undoing (backtracking from) an action.

  • Reversing data.

  • and more...

Time Complexity

*To access some value you need first to pop an element from the top.


import { LinkedList } from '../LinkedList/LinkedList';

export class Stack<T> {
  private storage = new LinkedList<T>();

  public push(value: T): void {;

  public pop(): T | null {
    return || null;

  public isEmpty(): boolean {
    return !;

  public peek(): T | null {
    return || null;

  public toArray(): T[] {

  public toString(callback?: (val: T) => string): string {

Last updated