码迷,mamicode.com
首页 > 其他好文 > 详细

什么是栈?

时间:2019-11-30 22:45:09      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:连续   数据结构   image   cti   结构   原则   添加元素   回收机制   article   

㈠什么是栈?

⑴栈,英文 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

什么是栈?

标签:连续   数据结构   image   cti   结构   原则   添加元素   回收机制   article   

原文地址:https://www.cnblogs.com/shihaiying/p/11964320.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!