使用javascript对堆栈元素进行排序

2024-04-19

我试图理解使用递归对堆栈元素进行排序http://www.geeksforgeeks.org/sort-a-stack-using-recursion/ http://www.geeksforgeeks.org/sort-a-stack-using-recursion/不允许使用任何循环结构,如 while、for...等。我们只能在Stack S上使用以下ADT函数:

is_empty(S) :测试堆栈是否为空。

push(S) :将新元素添加到堆栈中。

pop(S) :从堆栈中删除顶部元素。

top(S) :返回顶部元素的值。请注意,这 函数不会从堆栈中删除元素。 我尝试了下面但出现错误

var stack = [-3, 14, 18, -5, 30];

function sortStack() {
  if (stack.length > 0) {
    temp = stack.pop();
    sortStack();
    sortedInsert(temp, stack);
  }
}

function sortedInsert(element, stack) {
  if (stack.length > 0 || element > stack[stack.length - 1]) {
    stack.push(element);
  } else {
    temp = stack.pop();
    sortedInsert(element, stack);
    stack.push(temp);
  }

}

sortStack();

console.log(stack);
RangeError: Maximum call stack size exceeded
at sortedInsert:12:22
at sortedInsert:21:5
at sortedInsert:21:5
at sortedInsert:21:5
at sortedInsert:21:5
at sortedInsert:21:5

使用 javascript,局部(作用域)变量需要声明为 var,否则它们是静态的。如果 sortStack() 中 t 之前没有 var,t 将是一个静态变量,并且每次弹出都会被覆盖,从而在 sortStack() 的所有返回上留下 t == -3。 SortedInsert() 中的 x 也会出现同样的问题。

var stack = [-3, 14, 18, -5, 30];

function sortStack(s) {
  if (s.length > 0) {
    var t = s.pop();
    sortStack(s);
    sortedInsert(s, t);
  }
}

function sortedInsert(s, e) {
  if (s.length == 0 || e > s[s.length - 1]) {
    s.push(e);
  } else {
    var x = s.pop();
    sortedInsert(s, e);
    s.push(x);
  }
}

sortStack(stack);

console.log(stack);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用javascript对堆栈元素进行排序 的相关文章

随机推荐

  • MVC WebGrid 是开源的吗?

    MVC WebGrid 是开源的吗 如果可以的话哪里可以找到源代码 当前版本的 WebGrid 几乎没有文档 实现不完整等 我正在尝试做一件简单的事情 即向视图中的 WebGrid Column 添加可见性属性 但这是不可能的 您可以下载A
  • 如何在字符串中使用变量

    我正在尝试在字符串中实现变量 我已经搜索过这个并尝试向它扔不同的东西 但似乎没有任何效果 我有一个如下所示的变量 http localhost 8080 Editor name Default 我使用以下方法获取值没有问题 function
  • Dataflow 2.1.0 中是否有 IntrabundleParallelization 的替代方案?

    根据 dataflow 2 X 的发行说明 IntraBundleParallelization 已被删除 有没有办法控制 增加数据流 2 1 0 上 DoFns 的并行度 当我在 1 9 0 版本的数据流上使用 IntrabundlePa
  • 带百分比的 CSS 位置

    我在另一个 div 中相对位置 div 时遇到问题 我想制作一个位于屏幕水平中间的 div 并在这个 div 中我想放置 3 个具有相同高度的其他 div 但他们所有人都应该做出反应 图片胜于雄辩 div div class row div
  • 警告似乎指向不同的对象地址

    我正在使用 PySide 当我尝试将电子表格设置为某个小部件时收到警告 09 18 14 48 54 107 WARNING D 0x7ff4a0074650 qt Could not parse stylesheet of widget
  • Python os.chdir() 似乎不起作用

    我似乎无法更改 python 中的目录 import os os getcwd C Users Jon Folder IdbyGenotype os chdir r C Users Jon Folder IdbyGenotype thiso
  • Typescript `typeof React.Component` 不扩展接口?定义高阶组件时遇到问题

    我正在创建一个高阶组件来包装扩展接口的组件 interface ClickOutsideInterface onClickOutside e Event gt void 我创建的工厂期望React ComponentClass实施Click
  • 在 Android 上使用 obgenesis 时出现 NoClassDefFoundError

    我正在开发一个 Android 应用程序 它使用com rits cloning and org objenesis 深度克隆对象的库 目的是将相同的对象添加到我的树结构类中两次或多次 而不必担心原始对象引用相同的对象 自从定期clone
  • 重新启动在 Apache + mod_python 上运行的 Django 应用程序

    我正在 Apache mod python 上运行 Django 应用程序 当我对代码进行一些更改时 有时它们会立即生效 有时则不会 直到我重新启动 Apache 然而 我真的不想这样做 因为它也是一个运行其他东西的生产服务器 还有其他方法
  • 在 ListTile 中放置两个尾随图标

    我想将两个图标并排放置在 ListTile 的 尾随 一侧 我尝试添加一个 Row 小部件 其中包含两个图标 但它完全搞乱了整个 ListTile 的布局 使其无法使用 有什么办法可以扩大分配给尾部部分的空间吗 这是代码 import pa
  • 在 Java Runtime.getRuntime().exec(...) 中使用引号和双引号

    我正在尝试在 Mac OSX 中从 Java 启动 Lisp 映像 使用控制台中的图像 我输入以下内容 lisp image eval package method some argument 一切都运行良好 在Java中 我在使用传递引号
  • 为什么大多数 API 分页不依赖 HTTP Range 标头?

    我搜索了很多 但找不到这个问题的好的答案 作为 HATEOAS 爱好者 我认为这个标题非常适合 Range item 1 20 100 在HTTP规范中 我不明白一些 矛盾 范围单位可以接受 其他范围单位 range unit bytes
  • Twig form_theme_self自定义单独字段

    我有一个视图 我试图覆盖每个单独字段的表单主题http symfony com doc current cookbook form form customization html how to customize an individual
  • 谁给了 SWI-Prolog 幽默感?

    谁给了 SWI Prolog 幽默感 Welcome to SWI Prolog threaded 64 bits version 7 3 35 SWI Prolog comes with ABSOLUTELY NO WARRANTY Th
  • 设置了 LARGEADDRESSAWARE 标志的应用程序获得的虚拟内存较少

    我有一个 32 位应用程序 由一个 EXE 和多个 DLL 组成 EXE 是用 LARGEADDRESSAWARE标志设置 所以我预计在 64 位操作系统上我应该获得 4 GB 的用户地址空间 但在某些 64 位 Win 7 系统上 我只能
  • 用于测试 Schema.org 标记的工具[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道测试 Schema org 的好工具 http schema org http schema org 标记 Google Rich
  • 使用 Excel 进行地址、字符串操作

    我目前正在对城市地址上的一个非常大的数据源进行一些工作 其中数据看起来像这样 source 不 174 史密斯街 174 号 5 楼 史密斯街 174 号 我使用了一个函数来删除在extendoffice 上显示的重复项 https www
  • 对 matplotlib 图中两点之间的区域进行阴影处理

    如何在图中的两点之间添加阴影区域绘图库 http matplotlib org index html plot 在示例中绘图库 http matplotlib org index html下面的绘图中 我使用手动添加了阴影黄色区域Skitc
  • 如何访问我的开发人员创建的 EC2?

    我的开发人员在 AWS 上创建了一个 EC2 实例 我希望能够通过我自己的仪表板访问它 我所做的是 作为 root 用户 我为我和他创建了一个 IAM 帐户 并将我们俩分配到一个名为 PowerUsers 的组 我创建了一个组织单位并将他的
  • 使用javascript对堆栈元素进行排序

    我试图理解使用递归对堆栈元素进行排序http www geeksforgeeks org sort a stack using recursion http www geeksforgeeks org sort a stack using