资讯专栏INFORMATION COLUMN

数据结构——栈

ixlei / 3128人阅读

摘要:栈是最基本的数据结构之一,他的特点是后进先出栈的基本功能进栈添加元素到栈顶出栈删除栈顶的元素并返回读取栈顶的数据元素判断栈是否为空,为空返回计算栈存储数据的大小清空栈打印栈中的所有元素代码实现基本的架构如下所添加元素到栈顶进栈的元素出栈,删

栈是最基本的数据结构之一,他的特点是:后进先出

栈的基本功能

进栈:添加元素到栈顶

出栈:删除栈顶的元素并返回

读取栈顶的数据元素

判断栈是否为空,为空返回true

计算栈存储数据的大小

清空栈

打印栈中的所有元素

代码实现

基本的架构如下所:

function Stack(){
    let item = [];

    /**
     * 添加元素到栈顶
     * @param m 进栈的元素
     */
    this.enStack = function(m){
    }

    /**
     * 出栈,删除栈顶的元素并返回
     */
    this.deStack = function(){
    }

    /**
     * 读取栈顶的元素
     */
    this.peek = function(){
    }

    /**
     * /判断栈是否未为空
     */
    this.isEmpty = function(){
    }

    /**
     * 计算栈的容量
     */
    this.size = function(){
    }

    /**
     * 清空栈
     */
    this.clear = function(){
    }

    /**
     * 打印栈中的所有元素
     */
    this.print = function(){
    }

}

this.enStack——进栈操作

    this.enStack = function(m){
        item.push(m);
    }

this.deStack——出栈

    this.deStack = function(){
        return item.pop();
    }

this.peek 读取栈顶的元素

    this.peek = function(){
        return item[item.length - 1];
    }

this.isEmpty 判断栈是否为空

    this.isEmpty = function(){
        return item.length === 0;
    }

this.size 计算栈的容量

    this.size = function(){
        return item.length;
    }

this.clear 清空栈

    this.clear = function(){
        item = [];
    }

this.print 打印栈中的元素

    this.print = function(){
        console.log(item.toString());
    }
栈的实际应用

在进制转化的结果是将余数倒着排列,这时就需要用到栈,先得到的余数放后面,后得到的余数放前面,具体实现过程

十进制转化为二进制

十进制转化为二进制的计算方式:除2取余法

代码实现过程:

function transformTo(decNumber){
  let remStack = new Stack();
  let rem = "";
  let remString = "";

  while(decNumber){
      rem = decNumber % 2;
      remStack.enStack(rem);
      decNumber = parseInt(decNumber / 2);
  }

  while(!remStack.isEmpty()){
      remString += remStack.deStack().toString();
  }

  return remString;
}

const decRes = transformTo(10);
console.log(decRes);

最后的输出结果是:1010

将十进制转化为任意进制
function transformTo(decNumber, base){
    let remStack = new Stack();
    let rem;
    let remString = "";
    let digits = [0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"];

    while(decNumber > 0){
        rem = decNumber % base;
        remStack.enStack(rem);
        decNumber = parseInt(decNumber / base);
    }

    while(!remStack.isEmpty()){
        remString += digits[remStack.deStack()];
    }

    return remString;
}

const decRes = transformTo(1200, 16);
console.log(decRes);

输出结果是:4B0

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/92171.html

相关文章

  • js数据结构和算法(二)和队列

    摘要:对于栈来说,这个表尾称为栈的栈顶,相应的表头称为栈底。栈和队列的区别栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。出栈操作出栈操作就是在栈顶取出数据,栈顶指针随之下移的操作。 基本概念 栈和队列都是动态的集合,在栈中,可以去掉的元素是最近插入的哪一个。栈实现了后进先出。在队列中,可以去掉的元素总是在集合中存在的时间最长的那一个。队列实现了先进先出的策略。 栈的官...

    jsummer 评论0 收藏0
  • Java版-数据结构-

    摘要:介绍栈是一种后进先出的线性表数据结构,分为栈顶和栈底两端,仅允许在表的一端插入元素,这一端被称为栈顶,另外一端称之为栈底。 介绍 栈是一种后进先出的线性表数据结构,分为栈顶和栈底两端,仅允许在表的一端插入元素,这一端被称为栈顶,另外一端称之为栈底。栈,只有两种操作,分为入栈(压栈)和出栈(退栈);向栈中添加元素的操作叫做入栈,相反从栈中删除元素叫做出栈。 特点 只能从栈顶添加元素或者...

    voidking 评论0 收藏0
  • JavaScript数据结构

    摘要:我们都知道数组是里面比较常用的一种数据结构,栈和数组类似,定义如下栈是一种遵从后进先出原则的有序集合。新增加和待删除的元素都保存在栈的尾部,也称栈顶,相反的另一端就叫栈底,在栈的这种数据结构里面,我们新增的元素都在栈顶,旧的元素都在栈底。 由于不是计算机专业出身,对数据结构这些了解的比较少,最近看了一些相关的书籍,这里做一些总结。本篇要说的是栈。我们都知道数组是JavaScript里面...

    nanchen2251 评论0 收藏0
  • finally与return之间的关系

    摘要:则会在转移指令前执行。总结与之间的关系如果在中含有语句,那么语句的还有作用吗先看一段代码如果你对内存布局不是很清楚,请看这篇文章虚拟机类加载机制和字节码执行引擎重点关注运行时栈帧结构局部变量表槽,操作数栈。 定论 问:finally语句一定会执行吗?答: 如果没有执行相应的try语句则不会执行。 在try语句中如果调用System.exit(0)方法则不会执行。 问:finally...

    Yuanf 评论0 收藏0
  • JS数据结构学习:

    摘要:栈的应用前面介绍了那么多栈相关的知识,最后也是介绍栈的应用场景的时候了,栈的实际应用非常广泛,例如用来存储访问过的任务或路径撤销的操作。 栈的定义 什么是栈?栈是一种遵循后进先出原则的有序集合,新添加的或者待删除的元素都保存在栈的同一端,称为栈顶,另一端称为栈底,在栈里,新元素靠近栈顶,旧元素靠近栈底,用个图来看大概这样式的:showImg(https://segmentfault.c...

    Alfred 评论0 收藏0
  • js 调用机制与ES6尾调用优化介绍

    摘要:调用栈的运行机制机制程序运行到一个函数,它就会将其添加到调用栈中,当从这个函数返回的时候,就会将这个函数从调用栈中删掉。在调用栈中每个调用侦都对应一个函数,最上方的调用帧称为当前帧,调用栈是由所有的调用侦形成的。 showImg(https://segmentfault.com/img/remote/1460000019244497?w=900&h=600); 调用栈的英文名叫做Cal...

    AaronYuan 评论0 收藏0

发表评论

0条评论

ixlei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<