萌新一个,学习一下。
数组是一个线性结构,并且可以在数组的任意位置插入和删除元素。而栈就是比较常见的受限的线性结构,栈的特点为先进后出,后进先出。
程序中的栈结构:
-
**函数调用栈:**函数套娃,后进先出。
-
**递归:**无限套娃,栈溢出。
栈常见的操作:
-
push(element):添加一个新元素到栈顶位置;
-
pop():移除栈顶的元素,同时返回被移除的元素;
-
peek():返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它);
-
isEmpty():如果栈里没有任何元素就返回true,否则返回false;
-
size():返回栈里的元素个数。这个方法和数组的length属性类似;
-
toString():将栈结构的内容以字符串的形式返回。
封装栈类 代码实现一下
class Stack {
constructor() {
this.items = [];
}
// 1. 将元素压入栈
push(element) {
this.items.push(element)
}
// 2. 从栈中取出元素
pop() {
return this.items.pop()
}
// 3. 查看栈顶元素
peek() {
return this.items[this.items.length - 1]
}
// 4. 判断栈顶是否为空
isEmpty() {
return this.items.length === 0
}
// 5. 获取栈中元素的个数
size() {
return this.items.length
}
// 6. toString方法
toString() {
return this.items.join(',')
}
}
let s = new Stack()
s.push(1)
s.push(2)
s.push(3)
console.log(s)
console.log(s.pop()) //3
console.log(s.peek()) //2
console.log(s.isEmpty()) //false
console.log(s.size()) //2
console.log(s.toString()) //1,2
栈结构的应用:
利用栈结构后进先出的特点封装十进至转换为二进至的函数
class Dec2Bin extends Stack {
// 接收一个十进制的
set(decNumber) {
while (decNumber > 0) {
super.push(decNumber % 2)
decNumber = Math.floor(decNumber / 2)
}
}
// 2.取值
take() {
let binaryString = ''
while (!super.isEmpty()) {
binaryString += super.pop()
}
return binaryString
}
}
let dec2bin = new Dec2Bin()
dec2bin.set(825)
console.log(dec2bin.take()) //1100111001
其他应用实例,七夕诶,懒得写了,睡觉睡觉。