队列是一种列表,用于存储按顺序排列的数据,先进先出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;
}