队列在js中非常简单,入栈用push()方法,出栈用shfit()方法。
当队列遇上优先权的时候(比如急诊室,会事先给不同程度的病人安排优先序号),出列以优先权为顺序
function queue(){
this.dataStore=[];
this.enqueue=enqueue;
this.dequeue=dequeue;
this.front=front;
this.back=back;
this.toString=toString;
this.empty=empty;
}
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;
}
//模拟队列
var person=new queue();
person.enqueue("zhangsan");
person.enqueue("lisi");
person.enqueue("wangwu");
person.enqueue("maliu");
console.log(person.toString());
person.dequeue();
console.log(person.toString());
//**************基数排序******************
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 conllect(queues,nums){
var i=0;
for(var digit=0;digit<10;++digit){
while(!queues[digit].empty()){
nums[i++]=queues[digit].dequeue();
}
}
}
function dispArray(arr){
for(var i=0;i<arr.length;i++){
console.log(arr[i]+" ");
}
}
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.random()*100);
}
//
// console.log("before redix sort: ");
// dispArray(nums);
//
// distribute(nums,queues,10,1);//基于个位选择队列
// conllect(queues,nums);//从这十个队列中收集数
// distribute(nums,queues,10,10);//基于十位选择队列
// conllect(queues,nums);//从这十个队列中收集数
// console.log("After radix sort: ");
// dispArray(nums);
//**********************************************
//*****************优先队列************************
function patient(name,code){
this.name=name;
this.code=code;
}
//重写出对列函数,以优先权为顺序
function dequeue(){
var priority=0;
for(var i=1;i<this.dataStore.length;++i){
if(this.dataStore[i].code<this.dataStore[priority].code){
priority=i;
}
}
return this.dataStore.splice(priority,1);
}
function toString(){
var retStr="";
for(var i=0;i<this.dataStore.length;i++){
retStr+=this.dataStore[i].name+" code:"
+this.dataStore[i].code+"\n";
}
return retStr;
}
var ed=new queue();
var p1=new patient("simith",3);
var p2=new patient("simith1",2);
var p3=new patient("simith2",1);
var p4=new patient("simith3",5);
var p5=new patient("simith4",4);
var p6=new patient("simith5",1);
ed.enqueue(p1);
ed.enqueue(p2);
ed.enqueue(p3);
ed.enqueue(p4);
ed.enqueue(p5);
ed.enqueue(p6);
ed.toString();
var seen=ed.dequeue();
console.log("出列的是:"+seen[0].name);
var seen=ed.dequeue();
console.log("出列的是:"+seen[0].name);
console.log(ed.toString());