【DS】C5--队列

161 阅读1分钟

队列是一种列表,用于存储按顺序排列的数据,先进先出FIFO。应用:提交操作系统执行的一系列进程,打印任务池等。

1.对队列的操作
  • 入队
  • 出队
  • 读取队头的元素peek(),返回队头元素,但不把它从队列中删除。
2.一个用数组实现的队列
function Queue() {
	this.dataStore = [];
	this.enqueue = enqueue;
	this.dequeue = dequeue;
	this.front = front;
	this.back = back;
	this.toString = toString;
	this.empty = empty;
}
//enqueue() 方法向队尾添加一个元素
function enqueue(element){
	this.dataStore.push(element);
}
//dequeue()方法删除队首的元素
function dequeue(){
	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;
}
3.使用队列:方块舞的舞伴分配问题
4.使用队列对数据进行排序
基数排序
function distribute(nums,queues,n,digit){
	for(digit  == 1){
		queues[nums[i]%10].enqueue(nums[i]);
	}
	else{
		queues[Math.floor(num[i]/10)].enqueue(num[i]);
	}
}

function collect(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++){
		putstr(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.floor(Math.random()*101));
}

5.优先队列
//医院急诊优先队列的实现
function dequeue(){
	var priority = this.dataStore[0].code;
	for (var i= 1;i<this.dataStore.length;++i){
		if(this.dataStore[i].code<priority){
			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;
}