Законно ли выполнение вышеуказанной операции в стеке?
Это не традиционная операция стека. Структуру данных, которая позволяла вам делать это, на самом деле нельзя назвать стеком; это скорее простой старый список.
Если стек не позволяет удалять данные между вершиной и началом. Какие альтернативные структуры данных используются в javascript для вышеуказанной логики?
Что-то не так с простым Array ? Он дает вам элемент произвольного доступа, который вы хотите написать:
var a= [0, 1, 2, 3];
a.splice(1, 1);
// a==[0, 2, 3]
плюс удобные методы стекового стиля для доступа к фронтальным и хвостовым стекам (и, следовательно, к очередям): push / pop / shift / unshift.
Нет особого смысла создавать свой собственный класс-оболочку Stack (), когда Array () уже покрывает его IMO. Хотя компьютерного ученого могут интересовать такие вещи, как алгоритмическая сложность связанных списков для стеков, на практике вы не сможете улучшить оптимизированную реализацию Array, встроенную в современные интерпретаторы JavaScript из кода более высокого уровня.