持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
玩转数据结构,从入门到进阶
栈stack
首先看一下栈的特点:
- 栈是一种后进先出的数据结构也是一种线性结构
- 相比数组,栈对应的操作是数组的子集
- 只能从一端添加元素,也只能从一端取出元素(取元素只能取栈顶元素)
- 这一端称为栈顶
栈在数据结构中,应用非常广泛。
栈的应用
栈的应用非常广泛,例如
- 在很多编辑器中,都有一个 undo(撤销) 的操作,这便是我们最常见的栈应用。(程序员没了撤销可不能活),每次撤销,就会将栈顶元素取出,并进行相关操作
- 程序调用的系统栈,比如在我们嵌套调用函数时,如下,我们在执行A的时候遇到B函数,会暂停A函数的执行并将其存储到系统栈中,进而执行B,同理存入B函数,执行C函数,C函数执行完后,就会看系统栈中的内容,找到还没有执行的B函数,B函数执行完后,执行A函数。然后系统栈为空。整个算是执行完了。概述:在编程时,进行子过程调用,当一个子过程执行完成,就可以回到上层调用中断的位置继续执行下去,用系统栈记录每次中断时的点
function A(){
...
B()
...
}
function B(){
...
C()
...
}
function C(){
...
...
...
}
栈的实现
js的实现过程
push
入栈
pop
出栈
getSize
获取栈的大小
peek
查看栈顶元素
isEmpty
栈是否为空
js可以直接使用数组当作一个栈,数组方法比较多,很容易实现
栈相关算法
有效括号
这道题还是很简单的,主要用到了栈的知识,
遇到左括号时,将对应的右括号存入栈中;遇到右括号时,就看看栈顶元素是否和这个右括号相同。如果相同的话,这两个括号就匹配上了,相应的出栈后,接着对后面的字符串进行匹配。
删除字符串中的所有相邻重复项
两道非常简单的题。
后续补充......
队列Queue
队列的特点:
- 栈是一种先进先出的数据结构也是一种线性结构
- 相比数组,队列的操作是数组的子集
- 只能从一端(队尾)添加元素,从一另端(队首)取出元素
普通队列的实现
队列在js中可以直接通过js的push和shift数组方法,进行构成。
循环队列
循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
[循环队列讲解] leetcode.cn/problems/de…
var MyCircularQueue = function (k) {
this.capacity = k + 1;
this.elements = new Array(this.capacity).fill(0);
this.rear = 0;
this.front = 0;
};
MyCircularQueue.prototype.enQueue = function (value) {
if (this.isFull()) {
return false;
}
this.elements[this.rear] = value;
this.rear = (this.rear + 1) % this.capacity;
return true;
};
MyCircularQueue.prototype.deQueue = function () {
if (this.isEmpty()) {
return false;
}
this.front = (this.front + 1) % this.capacity;
return true;
};
MyCircularQueue.prototype.Front = function () {
if (this.isEmpty()) {
return -1;
}
return this.elements[this.front];
};
MyCircularQueue.prototype.Rear = function () {
if (this.isEmpty()) {
return -1;
}
return this.elements[(this.rear - 1 + this.capacity) % this.capacity];
};
MyCircularQueue.prototype.isEmpty = function () {
return this.rear == this.front;
};
MyCircularQueue.prototype.isFull = function () {
return ((this.rear + 1) % this.capacity) === this.front;
};
队列相关算法
算法题待补充......