Операция стека в JavaScript
-
07-07-2019 - |
Вопрос
Я реализую стек в JavaScript.
Учитывать:
Stack{0,1,2,3} Top:0
Теперь пользователь выдает значение 2:
Stack{0,1,3} Top:0
Это приемлемое поведение для стека?Я использую свой собственный стек, но есть ли какой-нибудь встроенный код, который сделает это за меня?
Мой код:
function Stack() //Creating Stack Object
{
// Create an empty array of cards.
this.cards = new Array(); //Cards array inside stack object
this.push = pushdata; //Call pushdata function on push operation
this.pop = popdata; //Call popdata function on pop operation
this.printStack = showStackData; //Call showStackData function on printstack operation
}
function pushdata(data)
{
this.cards.push(data);
}
function popdata(data)
{
return this.cards.pop();
}
function showStackData()
{
return this.cards;
}
var a = new Stack(); //Create stack Object
a.push(12); //Push Data onto Stack
a.push(32);
a.push(42);
var z = a.pop();
document.write("Data Popped: " + z);
document.write("Stack Output: " + a.printStack());
Если стек не является подходящей структурой данных для этого приложения, какой тип структуры данных будет правильным?
Решение
Законно ли выполнять описанную выше операцию в стеке?
Это не традиционная операция со стеком.Структуру данных, которая позволяла вам это делать, на самом деле нельзя было назвать стеком;это скорее простой старый список.
Если стек не позволяет удалить данные между вершиной и началом. Какова структура изменения данных, используемая в javascript для приведенной выше логики?
Что-то не так с простым Множество?Он дает вам желаемую запись элемента произвольного доступа:
var a= [0, 1, 2, 3];
a.splice(1, 1);
// a==[0, 2, 3]
плюс удобные методы в стиле стека для доступа как к фронтально загруженным, так и к хвостовым стекам (и, следовательно, к очередям):нажать/поп/сдвинуть/снять.
Нет особого смысла создавать свой собственный класс-оболочку Stack(), если Array() уже покрывает его, IMO.Хотя ученый-компьютерщик может интересоваться такими вещами, как алгоритмическая сложность связанных списков для стеков, на практике вы не сможете улучшить оптимизированную реализацию Array, встроенную в современные интерпретаторы JavaScript, из кода более высокого уровня.
Другие советы
Невозможно сделать это с помощью Pop (не добавляя по пути других вещей).Вам следует подумать о том, чтобы предоставить пользователю другой способ найти, где находится число 2, и другой метод, позволяющий пользователю извлечь его, например, с помощью сращивания массива.Но к тому времени это уже не стек.
Если вам действительно необходимо использовать стеки, вы можете извлечь данные несколько раз, временно сохранить извлеченные данные в другом стеке путем нажатия, а затем, когда вы закончите, сделать обратное, чтобы вернуть конец стека на место.
Нечто подобное обычно делается с помощью операций отмены/повтора в приложениях с графическим интерфейсом — у них есть стек операций отмены и противоположный стек операций повтора.«Отменить» перемещает действие из стека A в B, а «Вернуть» перемещает действие из стека B в A.Новое действие добавляется в стек отмены и полностью уничтожает стек повтора.
Другое место, где это используется, — это списки «Назад/Вперед» в вашем браузере.