什么是栈?

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

以上是关于什么是栈?的主要内容,如果未能解决你的问题,请参考以下文章

简单理解什么是栈

化解数据结构什么是栈?手写实现一个栈结构

化解数据结构什么是栈?手写实现一个栈结构

什么是栈?

什么是栈区?

什么是栈?Java如何通过栈实现综合计算器?