5、队列

来源:互联网 发布:淘宝情趣内衣评价晒图 编辑:程序博客网 时间:2024/06/10 23:57
function Queue(){this.dataStore = [];this.enqueue = enqueue;this.dequeue = dequeue;this.front = front;this.back = back;this.toString = toString;this.empty = empty;this.count = count;}function enqueue(element){this.dataStore.push(element);}function dequeue(){return this.dataStore.shift();}function front(){return this.dataStore[0];}function back(){return this.dataStore[this.dataStore.length - 1];}function toString(){var retStr = "";for(var i=0; i<this.dataStore.length; ++i){retStr += this.dataStore[i] + "\n";}return retStr;}function empty(){if(this.dataStore.length == 0){return true;}else{return false;}}function count(){return this.dataStore.length;}function log(str){console.log(str);}//模拟方块舞var DancerDatas = ["F Allison", "M Frank", "M Mason", "M Clayton", "F Cheryl", "M Raymond", "F Jennifer", "M Bryan", "M David", "M Danny", "F Aurora"];function Dancer(name, sex){this.name = name;this.sex = sex;}// 把舞者按性别分成两列function getDancers(males, females){for(var i=0; i<DancerDatas.length; ++i){var dancer = DancerDatas[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));}}}// 宣布配对结果function dance(males, females){log("舞者配对:");while(!males.empty() && !females.empty()){var personF = females.dequeue();var personM = males.dequeue();log("女队舞者:" + personF.name + " 和男队舞者:" + personM.name + " 配成一对!");}}var maleDancers = new Queue();var femaleDancers = new Queue();getDancers(maleDancers, femaleDancers);dance(maleDancers, femaleDancers);if(maleDancers.count() > 0){log("还有 " + maleDancers.count() + " 位男性舞者等待配对");}if(femaleDancers.count() > 0){log("还有 " + femaleDancers.count() + " 位女性舞者等待配对");}// 基数排序function distribute(nums, queues, n, digit){for(var i=0; i<n; ++i){if(digit == 1){//把个位数是x的值放到queues数组的第x个元素队列//如25的个位数是5,则把25放到queues[5]的队列中queues[nums[i] % 10].enqueue(nums[i]);}else{//把十位数是x的值放到queues数组的第x个元素队列//如25的十位数是5,则把25放到queues[2]的队列中queues[Math.floor(nums[i] / 10)].enqueue(nums[i]);}}}// 对nums数组进行更新function collect(queues, nums){var i=0;for(var digit=0; digit<10; ++digit){while(!queues[digit].empty()){nums[i++] = queues[digit].dequeue();}}}function dispArr(arr){var str = "";for(var i=0; i<arr.length; ++i){str += arr[i] + " ";}log(str);}//start:var queues = [];for(var i=0; i<10; ++i){queues[i] = new Queue();}// 随机生成100以内的10个数放到nums数组var nums = [];for(var i=0; i<10; ++i){nums[i] = Math.floor(Math.random() * 100);}log("基数排序前:");dispArr(nums);// 第一次,按个位上的数字进行排序distribute(nums, queues, 10, 1);// 更新nums数组的元素collect(queues, nums);// 第二次,按十位上的数字进行排序distribute(nums, queues, 10, 10);// 更新nums数组的元素collect(queues, nums);log("基数排序后:");dispArr(nums);

0 0
原创粉丝点击