Вопрос

Я реализую стек в 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, и другой метод, позволяющий пользователю извлечь его, например, с помощью сращивания массива.Но к тому времени это уже не стек.

http://www.w3schools.com/jsref/jsref_splice.asp

Если вам действительно необходимо использовать стеки, вы можете извлечь данные несколько раз, временно сохранить извлеченные данные в другом стеке путем нажатия, а затем, когда вы закончите, сделать обратное, чтобы вернуть конец стека на место.

Нечто подобное обычно делается с помощью операций отмены/повтора в приложениях с графическим интерфейсом — у них есть стек операций отмены и противоположный стек операций повтора.«Отменить» перемещает действие из стека A в B, а «Вернуть» перемещает действие из стека B в A.Новое действие добавляется в стек отмены и полностью уничтожает стек повтора.

Другое место, где это используется, — это списки «Назад/Вперед» в вашем браузере.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top