Поверх массивов и списков строят структуры с особыми правилами доступа.
Стек (stack) работает по принципу LIFO — «последним пришёл, первым ушёл», как стопка тарелок: кладёшь и берёшь только сверху. Две операции: push (положить наверх) и pop (снять верхний) — обе O(1).
stack = [] stack.push(1); stack.push(2) // [1, 2] stack.pop() // вернёт 2
Стек повсюду: кнопка «Назад» в браузере, отмена действий (Ctrl+Z), вызовы функций (call stack).
Очередь (queue) работает по принципу FIFO — «первым пришёл, первым ушёл», как живая очередь: добавляют в конец, берут из начала. Операции: enqueue (в конец) и dequeue (из начала).
Очереди используют там, где важен порядок обработки: задачи на печать, сообщения, обработка запросов сервером. Стек и очередь отличаются только тем, с какого конца берут элемент, но это меняет всё поведение.