Skip to content

Instantly share code, notes, and snippets.

@easonhan007
Created September 4, 2014 09:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save easonhan007/0db39ed6a6c3c2cf442e to your computer and use it in GitHub Desktop.
Save easonhan007/0db39ed6a6c3c2cf442e to your computer and use it in GitHub Desktop.
implement queue using js and some examples
function Queue() {
this.dataSource = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
function enqueue(element) {
this.dataSource.push(element);
}
function dequeue() {
return this.dataSource.shift();
}
function front() {
return this.dataSource[0];
}
function back() {
return this.dataSource[this.dataSource.length - 1];
}
function toString() {
var resStr = '';
for (var i = 0; i < this.dataSource.length; ++i)
resStr += this.dataSource[i] + "\n";
return resStr;
}
function empty() {
if (this.dataSource.length == 0)
return true;
else
return false;
}
}
/*
test queue
var q = new Queue();
q.enqueue('a');
q.enqueue('b');
q.enqueue('c');
console.log(q.toString());
q.dequeue();
console.log(q.toString());
*/
/*
// Assigning Partners at a Square Dance
function Dancer(name, sex) {
this.name = name;
this.sex = sex;
}
function getDancers(males, females) {
var names = read('dancers.txt').split("\n") ;
for (var i = 0; i < names.length; ++i)
names[i] = names[i].trim();
for(var i = 0; i < names.length; ++i) {
var dancer = names[i].split(' ');
var sex = dancer[0];
var name = dancer[1];
if (sex == F)
females.enqueue(new Dancer(name, sex));
else
males.enqueue(new Dancer(name, sex));
} //for
} //getDancers
function dance(males, females) {
console.log("The dancer parters are\n");
while(!males.empty() && !females.empty()) {
person = females.dequeue();
putstr("Female dancer is: " + person.name);
person = males.dequeue();
putstr("and the male dancer is: " + person.name);
} //while
console.log('');
}
// test dancer programe
var maleDancers = new Queue();
var femaleDancers = new Queue();
getDancers(maleDancers, femaleDancers);
dance(maleDancers, femaleDancers);
if(!femaleDancers.empty())
console.log(femaleDancers.front().name + " is waitting to dance");
else
console.log(maleDancers.front().name + " is waitting to dance");
*/
// radix sort
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();
} //for
}
function displayArray(arr) {
for(var i = 0; i < arr.length; ++i)
process.stdout.write(arr[i] + " ");
}
// main radix sort
var queues = []
for(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));
}
console.log("Before radix sort");
displayArray(nums);
distribute(nums, queues, 10, 1);
collect(queues, nums);
distribute(nums, queues, 10, 10);
collect(queues, nums);
console.log("\nAfter radix sort:")
displayArray(nums);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment