栈和队列是两种类似于数组的数据结构,但是在添加和删除元素时更为可控,所以下面就简单介绍了下关于栈和队列的基本数据理念:
栈 —— 栈是一种后进先出(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
以上就是栈和队列的基本数据结构和实现方式啦~如有不足请指正。