DSA__JS 学习随笔--队列

队列(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描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值