Queue Practice

by Steven Senkus

JavaScript

function Queue() {
    this.dataStore = [];
}

Queue.prototype.enqueue = function (element) {
    this.dataStore.push(element);
};
Queue.prototype.dequeue = function () {
    return this.dataStore.shift();
};
Queue.prototype.front = function () {
    return this.dataStore[0];
};
Queue.prototype.back = function () {
    return this.dataStore[this.dataStore.length - 1]
};
Queue.prototype.toString = function () {
    var returnString = '';
    for (var i = 0; i < this.dataStore.length; i++) {
        returnString += this.dataStore[i];
    }
    return returnString;
};
Queue.prototype.empty = function () {
    return this.dataStore.length === 0;
};

/*
var men = new Queue();
men.enqueue('Albert');
men.enqueue('Bob');
men.enqueue('Charles');

var women = new Queue();
women.enqueue('Jackie');
women.enqueue('Kelly');
women.enqueue('Lisa');
women.enqueue('Megan');

while (!men.empty() && !women.empty()) {
	console.log(men.dequeue(), women.dequeue());
} */



function distribute(nums, queues, n, digit) {
    for (var i = 0; i < n; ++i) {
        if (digit == 1) {
            queues[nums[i] % 10].enqueue(nums[i]);
        } else {
            queues[Math.floor(nums[i] / 10)].enqueue(nums[i]);
        }
    }
}

function collect(queues, nums) {
    var i = 0;
    for (var digit = 0; digit < 10; ++digit) {
        while (!queues[digit].empty()) {
            nums[i++] = queues[digit].dequeue();
        }
    }
}

function displayArray(arr) {
    var output = ''
    for (var i = 0; i < arr.length; ++i) {
        output += (arr[i] + ' ');
    }
	console.log(output);

}

// main program
var queues = [];
for (var i = 0; i < 10; ++i) {
    queues[i] = new Queue();
}
var nums = [];
for (var i = 0; i < 10; ++i) {
    nums[i] = Math.floor(Math.floor(Math.random() * 101));
}
print("Before radix sort: ");
displayArray(nums);
distribute(nums, queues, 10, 1);
collect(queues, nums);
distribute(nums, queues, 10, 10);
collect(queues, nums);
displayArray(nums)