第五章(队列)

队列在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());


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值