A Stack is a linear data structure where elements are stacked on each other. It's like an array, but with a few restrictions:
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).
Operation | Description |
---|---|
push() | Add item to a stack. |
pop() | Remove item from a stack. |
peek() | Get the latest item in a stack. |
[]()""([])
Operation | Complexity |
---|---|
Insertion | O(1) |
Deletion | O(1) |
*Access | O(n) |
*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 {
this.storage.append(value);
}
public pop(): T | null {
return this.storage.deleteTail()?.value || null;
}
public isEmpty(): boolean {
return !this.storage.getLast();
}
public peek(): T | null {
return this.storage.getLast()?.value || null;
}
public toArray(): T[] {
return this.storage.toArray();
}
public toString(callback?: (val: T) => string): string {
return this.storage.toString(callback);
}
}