Data Structures: Стек и очередь
Стек
Стек - структура данных, которая действует по принципу LIFO (Last In, First Out: последний пришел, первый ушел)
Стек можно реализовать на базе массива (там достаточно легкая реализация) или на базе связного списка:
stack.ts
class Stack<T> {
list: Array<T>
constructor(array: T[] = []) {
this.list = array;
}
private getLastIndex(): number {
return this.list.length - 1;
}
push(item: T) {
list.push(item);
}
pop(): T | null {
return list.pop();
}
peek(): T | null {
return list.at(this.getLastIndex()) ?? null;
}
}
По сути, все операции в стеке занимают $O(1)$, ибо вставка, удаление и просмотр последнего элемента не предусматривают перебор каких-либо элементов в зависимости от входных данных.
ИнформацияИз-за реализации на основе массива (который должен быть ограничен в длине) — стек часто тоже ограничен в памяти.
Очередь
Очередь - структура данных, которая действует по принципу FILO (First In, Last Out: первый пришел, последний ушел)
queue.ts
class Queue<T> {
list: Array<T>
constructor(array: T[] = []) {
this.list = array;
}
push(item: T) {
list.push(item);
}
pop(): T | null {
return list.shift();
}
peek(): T | null {
return list.at(0) ?? null;
}
}