1、栈

2、栈实现
//stack构造函数
class Stack {
items = [];
constructor() {
}
//元素入栈,返回栈的大小
push(el) {
return this.items.push(el);
}
//元素出栈,返回出栈元素
pop() {
return this.items.pop();
}
//获取栈顶元素
getTop() {
return this.items[this.items.length - 1];
}
//获取栈的大小
size() {
return this.items.length;
}
//判断栈是否为空
isEmpty() {
return this.items.length === 0;
}
//清空栈
clear() {
this.items = [];
}
}
3、应用-数值转换

/***
* @description 十进制转化为N进制函数
* @param {Number} metadata 被转化的数值
* @param {Number} n 指定被转化的进制
* @returns {string}
*/
function binaryConversion(metadata, n) {
//初始化一个栈对象
let stack = new Stack();
let remainder = 0;
let res = "";
while(Math.floor(metadata / n) !== 0) {
//计算余数
// debugger;
remainder = metadata % n;
switch(remainder) {
case 10:
remainder = "A";
break;
case 11:
remainder = "B";
break;
case 12:
remainder = "C";
break;
case 13:
remainder = "D";
break;
case 14:
remainder = "E";
break;
case 14:
remainder = "F";
break;
}
//余数入栈
stack.push(remainder);
//metadata重新赋值
metadata = Math.floor(metadata / n);
}
//最后一次计算余数没有入栈,这里需要加一次入栈操作
remainder = metadata % n;
stack.push(remainder);
//输出最后结果
while(!stack.isEmpty()) {
res += stack.pop();
}
return res;
}
4、应用-括号匹配检验

/**
* @description 括号匹配检验:匹配[]、()、{}三种符号是否成对
* @param {String} metadata
* @returns {Boolean}
*/
function bracketMatch(metadata) {
//先用正则找出metadata中所有的[]、()、{}符号
let symbolReg = /[\[|\]|\(|\)|\{|\}]/g;
let symbolArr = metadata.match(symbolReg);
let stack = new Stack();
for(item of symbolArr) {
if (item === "(" || item === "[" || item === "{") {
stack.push(item);
}
if (item === "]") {
if (stack.getTop() === "[") {
stack.pop();
} else {
stack.push(item);
}
}
if (item === ")") {
if (stack.getTop() === "(") {
stack.pop();
} else {
stack.push(item);
}
}
if (item === "}") {
if (stack.getTop() === "{") {
stack.pop();
} else {
stack.push(item);
}
}
}
if (stack.isEmpty()) {
return true;
} else {
return false;
}
}
5、应用-行编辑程序

/**
* @description 检验行输入数据
*/
function lineEdit(input) {
let inputArr = input.split("");
let stack = new Stack();
let res = "";
for(item of inputArr) {
if (item !== "#" && item !== "@" ) {
stack.push(item);
} else if (item === "#") {
stack.pop();
} else if (item === "@") {
stack.clear();
}
}
while(!stack.isEmpty()) {
res += stack.pop()
}
return [...res].reverse().join("");
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。