Стековая операция в JavaScript - PullRequest
0 голосов
/ 10 марта 2009

Я реализую стек в 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());

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

Ответы [ 3 ]

8 голосов
/ 10 марта 2009

Законно ли выполнение вышеуказанной операции в стеке?

Это не традиционная операция стека. Структуру данных, которая позволяла вам делать это, на самом деле нельзя назвать стеком; это скорее простой старый список.

Если стек не позволяет удалять данные между вершиной и началом. Какие альтернативные структуры данных используются в 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 из кода более высокого уровня.

0 голосов
/ 10 марта 2009

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

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

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

0 голосов
/ 10 марта 2009

Невозможно сделать это с помощью Pop (без добавления других вещей по пути). Вы должны рассмотреть возможность предоставления пользователю другого способа узнать, где находится число 2, и другого способа, позволяющего пользователю извлечь его, например, с использованием соединения массивов. Но к тому времени это уже не стек.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...