栈 / 队列 —— JavaScript数据结构(一)

本文介绍了栈和队列这两种基本数据结构。栈遵循后进先出(LIFO)原则,常用于表达式求值等场景;队列遵循先进先出(FIFO)原则,类似于现实生活中的排队。文章通过类的实现方式详细讲解了如何在JavaScript中创建和操作栈和队列。
摘要由CSDN通过智能技术生成

栈和队列是两种类似于数组的数据结构,但是在添加和删除元素时更为可控,所以下面就简单介绍了下关于栈和队列的基本数据理念:

 

—— 栈是一种后进先出(LIFO:later in first out)的有序集合,新添加的元素靠近栈顶,最开始添加的元素靠近栈底

具体的步骤如下图所示:

那我们如何自己来实现一个栈呢?首先我们需要一种数据结构来保存栈里面的元素,显然,数组是一种比较好的数据结构:

我们可以用一个类表示一个栈,这个栈可以包含的操作有:

  • Push: 添加新元素到栈顶
  • Pop: 删除栈顶的元素
  • peek:获取栈顶的元素
  • isEmpty:返回栈中是否没有任何元素
  • clear:清空栈
  • size:返回栈的元素的个数

 

接下来,我们开始实现栈,具体代码实现过程如下:

function Stack(){
	let items = [];
	this.push = function (element){
		items.push(element);
	}
	this.pop = function(element){
		return items.pop();
	}
	this.peek = function (element) {
		return items[items.length-1];
	}
	this.size = function(){
		return items.length;
	}
	this.isEmpty = function () {
		return items.length === 0;
	}
	this.clear = function(){
		items = [];
	}
    this.print = function(){
		console.log(items.toString());
	}

}

let stack = new Stack(); // 初始化Stack类

stack.isEmpty(); // stack是否为空,输出为true
stack.push(1);  // 添加元素
stack.push(3);
stack.push(5);
stack.push(7);
stack.size(); // 4
stack.print(); // 1,3,5,7
stack.pop(); // 移出栈顶的元素
stack.isEmpty(); // false

 

队列 —— 这是一种先进先出(FIFO:first in first out)的数据结构,新添加的元素靠近队列的头部,后添加的元素在队列的尾部

具体的进出规则如下图所示:

队列的概念就类似于我们日常生活的排队:先进入队列的人就先接受服务,先结束排队。

那么如何实现一个队列呢,其实基本思路和栈是一样的,只是在添加和移出元素上两个的原则不同:

我们同样可以用一个类表示一个队列,可以包含的操作有:

  • Enqueue: 向队列添加新元素
  • Dequeue: 从队列移出元素
  • Front:查看队列头元素
  • isEmpty:返回队列中是否没有任何元素
  • clear:清空队列
  • size:返回队列的元素的个数
  • print:打印队列元素
function Queue(){
	let items = [];
	this.enqueue = function (element){
		items.push(element);
	}
	this.dequeue = function(element){
		return items.shift();
	}
	this.front = function (element) {
		return items[0];
	}
	this.size = function(){
		return items.length;
	}
	this.isEmpty = function () {
		return items.length === 0;
	}
	this.clear = function(){
		items = [];
	}
    this.print = function(){
		console.log(items.toString());
	}

}

let queue = new Queue(); // 初始化Queue类

queue.isEmpty(); // queue是否为空,输出为true
queue.enqueue(2);  // 添加元素
queue.enqueue(4);
queue.enqueue(6);
queue.size(); // 3
queue.print(); // 2,4,6
queue.dequeue(); // 移出队列头的元素
queue.isEmpty(); // false

以上就是栈和队列的基本数据结构和实现方式啦~如有不足请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值