栈的作用:在编程语言的 编译器 和 内存 中保存变量 、方法调用
1. 栈是一种后进先出的数据结构
2. 最下面的叫栈底, 最上面的叫栈顶
3. 进 叫 入栈,出 叫 出栈
4. 进 ----> push()
出 -----> pop()
检查栈顶元素 -----> peek()
是否为空 ------> isEmpty()
清空栈 -----> clear()
栈元素个数 -----> size()
5. 一个数组,第一个元素是栈底,最后一个元素是栈顶~
const Stack = function() {
var items = []
// 入栈
this.push = function (elem) {
items.push(elem)
}
// 得到栈
this.getItems = function () {
return items
}
// 出栈 移除栈顶元素
this.del = function () {
return items.pop() // 拿出出栈出来的元素
}
// 栈的长度
this.getlength = function () {
return items.length
}
// 清空栈
this.clear = function() {
return items = []
}
// 得到栈顶元素
this.peek = function () {
return items[items.length - 1]
}
// 判断栈是否为空
this.isEmpty = function () {
return items.length === 0 // 不用if!!
}
}
var a = new Stack()
/*
使用
a.del()
a.push(1)
a.getItems()
a.del()
a.getlength()
a.clear()
a.peek()
a.isEmpty()
*/
例:十进制转化二进制
var TentoTwo = function(num ,base) {
var stack = new Stack()
var remainder;
var integer;
while(num > 0) {
integer = Math.floor(num / base) // 取整数
remainder = num % base // 取余数
stack.push(remainder)
num = integer // 整数再继续除 base
}
// 获取栈顶元素
while(!stack.isEmpty()){
str += stack.del()
}
return str;
}
var result = TentoTwo(10,2) // 10转化成2进制
console.log(result) // 1010
简化一下以及增加判空处理~
var TentoTwo = function(num ,base) {
var stack = new Stack()
while(num > 0) {
stack.push(num % base) // 取余数放栈里
num = Math.floor(num / base) // 整数再继续除 base
}
// 获取栈顶元素
while(!stack.isEmpty()){
str += stack.del()
}
return str;
}
var result = TentoTwo(10,2) // 10转化成2进制
console.log(result) // 1010
例2: 判断一个字符串是否是回文
思路:将字符串存入栈中。这时候最后一个字符在栈顶,然后再出栈,对比出栈和原始的结果
var isPalindHome = function (str) {
var stack = new Stack()
for (var i = 0; i< str.length ; i++) {
stack.push(str[i])
}
var reserve = ''
while(stack.getlength() > 0) {
reserve += stack.del()
}
return reserve === str
}
var result = isPalindHome('1001')
console.log(result)
all~