栈的特点:先进后出
常见问题:
数制间的相互转换
1.最高位为n%b将此压入栈中
2.使用n/b向下取整替换掉n
3.重复1和2,直到n=0,而且没有余数了
4重复将栈里面的元素弹出
function mulBase(num, base) {
let s = [];
do {
s.push(num % base);
num = Math.floor(num /= base);
} while (num > 0);
let converted = '';
while (s.length > 0) {
converted += s.pop();
}
return converted;
}
回文
什么是回文:比如dad,将字符翻转之后还是dad
function isPalindrome(word) {
let s = [];
for (let i = 0; i< word.length; i++) {
s.push(word[i]);
}
let rword = '';
while (s.length > 0) {
rword += s.pop()
}
if (word === rword) {
return true
}
return false
}
用栈可以判断括号是否匹配
2.3+23/12+(3.14159*0.24
function demo (str) {
let sign = '(){}[]'
let map = {
'(': ')',
'{': '}',
'[': ']'
}
let s = []
for (let i = 0; i < str.length; i++) {
if (sign.includes(str[i])) {
let val = str[i];
switch (val) {
case '(':
case '[':
case '{': s.push(val); break;
case ')':
let map1 = s.pop();
if (map1 !== '(') {
return `位置${i}的)不匹配`
}
break;
case ']':
let map2 = s.pop();
if (map2 !== '[') {
return `位置${i}的]不匹配`
}
break;
case '}':
let map3 = s.pop();
if (map3 !== '{') {
return `位置${i}的}不匹配`
}
break;
}
}
}
if (s.length) {
return `符号${s.join()}没有闭合`
} else {
return '符号正确'
}
}
总结:进栈使用push,出栈使用pop,我们使用的数组来模拟栈结构,所以只需要使用者两个方法,始终要牢记栈的特点的是先进后出。