三、队列结构

本文介绍了队列的基本概念,包括其先进先出的特性,并详细讲解了如何基于数组封装一个基本的队列结构,包括入队、出队、查看队首元素等操作。接着,文章探讨了优先级队列的概念,指出其在插入元素时会根据优先级进行排序。最后,给出了优先级队列的实现,通过一个自定义的QueueElement构造函数确保元素按优先级插入队列。
摘要由CSDN通过智能技术生成

一、认识队列结构

队列(Queue)一种受限的线性表,先进先出(FIFO)

  • 受限之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作

二、队列的封装

有两种实现方式,

  1. 基于数组实现
  2. 基于链表实现

我们先基于数组实现,后面学习到链表时,再进行学习

function Queue(){
	this.items = []
	// 向队尾添加一个或者多个新的项
	Queue.prototype.enterqueue = function(element){
		this.items.push(element)
	}
	// 移除队列第一项,并返回被移除的项
	Queue.prototype.delqueue = function(){
		if(!this.items.length) return false
		return this.items.shift()
	}
	// 返回队列第一项
	Queue.prototype.front = function(){
		if(!this.items.length) return false
		return this.items[0]
	}
	// 判断队列是否为空
	Queue.prototype.isEmpty = function(){
		return this.items.length === 0
	}
	// 返回队列内个数
	Queue.prototype.size = function(){
		return this.items.length
	}
	// toString
	Queue.prototype.toString = function(){
		this.items.length ? this.items.toString():''
	}
}
// 队列的使用
const S = new Queue()

三、优先级队列

特点:

  • 普通的队列插入一个元素,数据会被放在后端
  • 但是优先级队列,在插入一个元素的时候会考虑该数据的优先级,和其他数据优先级进行比较,插入到正确的位置

四、优先级队列的封装

function PriorityQueue(){
	const items = []
	// 封装一个新的构造函数,用于保存元素和元素的优先级
	function QueueElement(element, priority){
		this.element = element
		this.priority = proority
	}

	PriorityQueue.prototype.enterqueue = function(element, priority){
		const qEl = new QueueElement(element,priority)
		if(this.items.length === 0){
			items.push(qEl)
		}else{
			let added = false
			for(let i = 0; i<this.items.length; i++){
				if(qEl.priority>this.items[i].priority){
					this.items.splice(i,0,qEl)
					added = true
					break
				}
			}
			if(!added){
				items.push(qEl)
			}
		}
	}
	// 移除队列第一项,并返回被移除的项
	PriorityQueue.prototype.delqueue = function(){
		if(!this.items.length) return false
		return this.items.shift()
	}
	// 返回队列第一项
	PriorityQueue.prototype.front = function(){
		if(!this.items.length) return false
		return this.items[0]
	}
	// 判断队列是否为空
	PriorityQueue.prototype.isEmpty = function(){
		return this.items.length === 0
	}
	// 返回队列内个数
	PriorityQueue.prototype.size = function(){
		return this.items.length
	}
	// toString
	PriorityQueue.prototype.toString = function(){
		this.items.length ? this.items.toString():''
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值