queue
by not important
HTML
<script src="http://searls.github.io/jasmine-all/jasmine-all-min.js"></script>
JavaScript
var Stack = function () {
this.list = [];
};
Stack.prototype.push = function (item) {
this.list.push(item);
};
Stack.prototype.pop = function () {
return this.list.pop();
};
Stack.prototype.isEmpty = function () {
return !this.list.length;
};
var Queue = function () {
this.inStack = new Stack();
this.outStack = new Stack();
};
Queue.prototype.enqueue = function (item) {
this.inStack.push(item);
};
Queue.prototype.dequeue = function () {
if(!this.outStack.isEmpty()) {
return this.outStack.pop();
} else {
var item;
while(!this.inStack.isEmpty()) {
item = this.inStack.pop();
if(this.inStack.isEmpty()) {
return item;
} else {
this.outStack.push(item);
};
}
}
};
describe('Queue', function () {
var queue;
beforeEach(function () {
queue = new Queue();
});
it('can enqueue and dequeue', function () {
queue.enqueue('a');
expect(queue.dequeue()).toEqual('a');
});
it('dequeues in correct order', function () {
queue.enqueue('a');
queue.enqueue('b');
queue.enqueue('c');
expect(queue.dequeue()).toEqual('a');
queue.enqueue('d');
expect(queue.dequeue()).toEqual('b');
queue.enqueue('e');
expect(queue.dequeue()).toEqual('c');
queue.enqueue('f');
expect(queue.dequeue()).toEqual('d');
expect(queue.dequeue()).toEqual('e');
expect(queue.dequeue()).toEqual('f');
});
});