资讯专栏INFORMATION COLUMN

js数据结构之栈

LeviDing / 1719人阅读

摘要:向一个栈插入新元素又称作进栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素从一个栈删除元素又称作出栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈通常的操作:

</>复制代码

  1. stack() // 创建一个空的栈对象
  2. push() // 入栈操作,将元素放至栈顶
  3. pop() // 出栈操作,将栈顶元素移除并返回
  4. peek() // 返回栈顶元素,不对栈做出操作
  5. isEmpty() // 判断栈是不是为空
  6. size() // 返回栈的元素个数

使用javascript模拟栈的实现:

</>复制代码

  1. function Stack () {
  2. let items = []
  3. this.push = function (element) {
  4. //添加一个(或几个)新元素到栈顶
  5. items.push(element)
  6. }
  7. this.pop = function () {
  8. //移除栈顶的元素,同时返回被移除元素
  9. return items.pop()
  10. }
  11. this.peek = function () {
  12. //返回栈顶的元素,但并不对栈做任何修改
  13. return items[items.length - 1]
  14. }
  15. this.isEmpty = function () {
  16. // 判断栈是不是为空
  17. return items.length === 0
  18. }
  19. this.size = function () {
  20. // 返回栈里元素的个数
  21. return items.length
  22. }
  23. this.clear = function () {
  24. // 移除栈里所有的元素
  25. items = []
  26. }
  27. this.print = function () {
  28. console.log(items.toString())
  29. }
  30. this.toString = function () {
  31. return items.toString()
  32. }
  33. }

用栈解决进制数转换问题:

</>复制代码

  1. function divide (num, base) {
  2. // num为需要转换的数, base为要转换的基数
  3. let remStack = new Stack(),
  4. rem,
  5. remString = ""
  6. while (num > 0) {
  7. rem = Math.floor(num % base)
  8. remStack.push(rem)
  9. num = Math.floor(num / base)
  10. }
  11. while (!remStack.isEmpty()) {
  12. remString += remStack.pop()
  13. }
  14. return remString
  15. }
  16. console.log(divide(18,16))

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

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

相关文章

  • 学习数据结构与算法之栈与队列

    摘要:于是翻出了机房里的这本学习数据结构与算法开始学习程序员的基础知识。这本书用了我最熟悉的来实现各种数据结构和算法,而且书很薄,可以说是一本不错的入门教程。队列在头部删除元素,尾部添加元素。 本系列所有文章:第一篇文章:学习数据结构与算法之栈与队列第二篇文章:学习数据结构与算法之链表第三篇文章:学习数据结构与算法之集合第四篇文章:学习数据结构与算法之字典和散列表第五篇文章:学习数据结构与算...

    pingan8787 评论0 收藏0
  • 利用PHP实现常用的数据结构之栈(小白系列文章四)

    摘要:堆栈算法引子栈是计算机术语中比较重要的概念,实质上栈就是一段内存区域,但是栈满足一定的特性,那就是只有一个口,具有先入后出的特性,这种特性在计算机中有很广泛的运用。 /** * PHP堆栈算法 * Created on 2017-4-27 * Author entner * Email 1185087164@qq.com */ 引子     栈...

    array_huang 评论0 收藏0
  • 利用PHP实现常用的数据结构之栈(小白系列文章四)

    摘要:堆栈算法引子栈是计算机术语中比较重要的概念,实质上栈就是一段内存区域,但是栈满足一定的特性,那就是只有一个口,具有先入后出的特性,这种特性在计算机中有很广泛的运用。 /** * PHP堆栈算法 * Created on 2017-4-27 * Author entner * Email 1185087164@qq.com */ 引子     栈...

    yankeys 评论0 收藏0
  • [个人心得]数据结构之栈,队列。

    摘要:另外栈也可以用一维数组或连结串列的形式来完成。压栈就是,出栈就是。出栈成功第个节点是这是单链表形式的栈的源码地址。队列只允许在后端称为进行插入操作,在前端称为进行删除操作。 维基百科 堆栈(英语:stack)又称为栈,是计算机科学中一种特殊的串列形式的抽象资料型别,其特殊之处在于只能允许在链接串列或阵列的一端(称为堆叠顶端指标,英语:top)进行加入数据(英语:push)和输出数据...

    curried 评论0 收藏0
  • 数据结构之栈(java版)

    摘要:本文力求简洁,只包含基础的栈功能,不想将大片的代码展示出来,让读者兴趣索然,阅读起来也十分费力,如有需要可以自行添加相关功能比如包中的类包含的,等等函数能力有限,有误之处还请不吝赐教定义内部类用于存储栈元素指向下一个栈元素的泛型元素方法方法 本文力求简洁,只包含基础的栈功能,不想将大片的代码展示出来,让读者兴趣索然,阅读起来也十分费力,如有需要可以自行添加相关功能比如java.util...

    hizengzeng 评论0 收藏0

发表评论

0条评论

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