队列(Queue)
队列是一种列表,只能在队尾插入元素,在队首删除元素
队列是一种先进先出(First-In-First-Out, FIFO)的数据结构
队列的实现
function Queue() {
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
//向队尾添加一个元素
fucntion enqueue(element) {
this.dataStore.push(element);
}
//删除队首的元素
function dequeue() {
return this.dataStore.shift();
}
//读取队首和队尾的元素
function front() {
return this.datStore[0];
}
function back() {
return this.dataStore[this.dataStore.length - 1];
}
//显示队列内的所有元素
function toString() {
let resStr = "";
for(let i = 0; i < tshi.dataStore.length; i++) {
resStr += this.dataStore[i] + "\n";
}
return resStr;
}
//判断队列是否为空
function empty() {
if(this.dataStore.length === 0) {
return true;
} else {
return false;
}
}
}
队列的使用
对数据进行排序
function distribute(nums, queues, n, digit) { //参数digit表示个位或十位上的值
for(let 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 collect(queues, nums) {
let i = 0;
for(let digit = 0; digit < 10; digit++) {
while(!queues[digit].empty()) {
nums[i++] = queues[digit].dequeue();
}
}
}
function dispArray(arr) {
for(let i = 0; i < arr.length; i++) {
putStr(arr[i] + " ");
}
}
let queues = [];
for(let i = 0; i < 10; i++) {
queues[i] = new Queue();
}
let nums = [];
for(let i = 0; i < 10; i++) {
nums[i] = Math.floor(Math.floor(Math.random() *101));
}
dispArray(nums);
distribute(nums, queues, 10, 1);
collect(queues, nums);
distribute(nums, queues, 10, 10);
collect(queues, nums);
dispArray(nums);
优先队列
//从优先队列中删除元素时,需要考虑优先权的限制
//场景:医院急诊科的候诊室
function Patient(name, code) {
this.name = name;
this.code = code;
}
//变量code是一个整数,表示患者的优先级或病情严重程度
//此时需要重新定义dequeue()方法,使其删除队列中拥有最高优先级的元素
function dequeue() {
let priority = this.dataStore[0].code;
let pos = 0;
for(let i = 1; i < this.dataStore.length; i++) {
if(this.dataStore[i].code < priority) {
priority = this.dataStore[i].code;
pos = i
}
}
return this.dataStore.splice(pos, 1);
}
//需要定义 toString() 方法来显示 Patient 对象
function toString() {
let resStr = "";
for(let i = 0; i < this.dataStore.length; i++) {
resStr += this.dataStore[i].name + " code: "
+ this.dataStore[i].code + "\n";
}
return resStr;
}
参考:数据结构与算法JavaScript描述