第五章(队列)

本文介绍了如何使用JavaScript实现简单的队列数据结构,并演示了队列在基数排序算法中的应用。此外,还讨论了如何创建优先级队列来处理带有优先级的任务。

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


基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理实现方法;②学习如何在STM32平台上进行电机控制算法的移植优化;③为开发高性能、低成本的电机驱动系统提供技术参考实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值