队列(JavaScript)

队列的实现(JavaScript)

队列遵循的原则与栈恰恰相反,队列遵循的是先进先出(FIFO)原则;它是一组有序的项,队列从队尾添加元素,在顶部删除元素。

在现实中,最常见的队列就是排队。,比如看电影要排队,一些旅游景点购票也要排队等等。
队列(JavaScript)_第1张图片
下面我们来创建一个队列:

首先声明队列类

class Queue {
     
	constructor(){
     
		this.count = 0;//标记队列大小
		this.lowest = 0;//用来追踪第一个元素的下标
		this.items = {
     };//用来储存元素的队列
	}

这里与栈不同的是我们用的是一个对象来储存队列的元素,不是说不能用数组,而是这样的数据结构对于后面再获取元素时更加高效。

接下来我们要声明下面队列的方法:

enqueue(element):向队列添加新元素
dequeue():移除队列的第一项并返回被移除的元素
peek():返回队列的第一项(最先添加的一项即最先被移除的一项),队列不做任何修改,该方法在其他语言中也叫做front方法
isEmpty():判断队列是否为空,返回布尔值 size():返回队列中的个数
clear():清空队列

在类中声明这些方法:

enqueue(element){
     
		this.items[this.count] = element;
		this.count++;
	}
	dequeue(){
     
		if(this.isEmpty())
			return undefined;
		const res = this.items[this.lowest]
		delete this.items[this.lowest];
		this.lowest++;
		return res;
	}
	peek(){
     
		if (this.isEmpty())
			return undefined;
		return this.items[this.lowest]
	}
	isEmpty(){
     
		return this.size() === 0;
	}
	size(){
     
		return this.count - this.lowest;
	}
	clear(){
     
		this.items = {
     };
		this.count = 0;
		this.lowest = 0;
	}
	toString(){
     
		if (this.isEmpty()) 
			return '';
		let objString = `${
       this.items[this.lowest]}`;
		for(let i = this.lowest + 1; i < this.count; i++){
     
			objString = `${
       objString}, ${
       this.items[i]}`;
		}
		return objString;
	}

最后添加了一个toString()方法用字符串模板的形式输出当前队列的元素。

你可能感兴趣的:(数据结构,javascript,数据结构,队列,queue)