什么是栈?
Posted shihaiying
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是栈?相关的知识,希望对你有一定的参考价值。
㈠什么是栈?
⑴栈,英文 Last In First Out 简称 LIFO,遵从后进先出的原则,与 “队列” 相反,在栈的头部添加元素、删除元素,如果栈中没有元素就称为空栈。
⑵是一种连续储存的数据结构,具有先进后出的性质。通常的操作有入栈(压栈),出栈和栈顶元素。想要读取栈中的某个元素,就是将其之间的所有元素出栈才能完成。
㈡栈的运行机制
⑴Constructor(capacity): 初始化栈内存空间,设定栈的容量
⑵isEmpty(): 检查栈是否为空,是否有元素
⑶isOverflow(): 检查栈空间是否已满,如果满了是不能在入栈的
⑷enStack(element): 栈顶位置入栈,先判断栈是否已满
⑸deStack(): 栈顶位置出栈,先判断栈元素是否为空
⑹len(): 栈空间已有元素长度
⑺clear(): 清空栈元素,内存空间还是保留的
⑻destroy(): 销毁栈,同时内存也要回收(通常高级语言都会有自动回收机制,例如 C 语言这时就需要手动回收)
⑼traversing(): 遍历输出栈元素
㈢测试
const s1 = new StackStudy(4);
s1.enStack(‘Nodejs‘); // 入栈
s1.enStack(‘技‘);
s1.enStack(‘术‘);
s1.enStack(‘栈‘);
s1.traversing() // 栈 | 术 | 技 | Nodejs
console.log(s1.deStack()); // 出栈 -> 栈
s1.traversing() // 术 | 技 | Nodejs
s1.traversing(true) // 从栈底遍历:Nodejs | 技 | 术
下面通过一张图展示以上程序的入栈、出栈过程:
㈣JavaScript 数组实现栈
⑴基于 JS 数组的入栈、出栈过程实现:
⑵采用 JavaScript 原型链的方式实现:
function StackStudy(elements) {
this.elements = elements || [];
}//初始化队列:初始化一个存储栈元素的数据结构,如果未传入默认赋值空数组
StackStudy.prototype.enStack = function(element) {
this.elements.push(element);
}//添加栈元素:实现一个 enStack 方法,向栈添加元素,注意只能是栈头添加
StackStudy.prototype.deStack = function() {
return this.elements.pop();
}//移除栈元素:实现一个 deStack 方法,栈尾部弹出元素
StackStudy.prototype.print = function() {
console.log(this.elements.toString());
}
const stack = new StackStudy([‘a‘, ‘b‘]);
stack.enStack(‘c‘);
stack.print()
stack.deStack(‘c‘);
stack.print();
㈤栈的经典应用:十进制转换为二进制、八进制、十六进制
代码如下:
const StackStudy = require(‘./stack.js‘);
const str = ‘0123456789ABCDEF‘;
function dataConversion(num, type) {
let x = num;
const s1 = new StackStudy(20);
while (x != 0) {
s1.enStack(x % type);
x = Math.floor(x / type);
}
while (!s1.isEmpty()) {
console.log(str[s1.deStack()]);
}
console.log(‘--------------------‘);
return;
}
dataConversion(1024, 8); // 测试八进制
dataConversion(1024, 16); // 测试十六进制
dataConversion(3000, 16); // 测试十六进制带字母的情况
dataConversion(1024, 2); // 测试二进制
参考:https://cloud.tencent.com/developer/article/1496388
以上是关于什么是栈?的主要内容,如果未能解决你的问题,请参考以下文章