当前位置: 首页 > 知识库问答 >
问题:

在堆栈中交替显示顶部和底部

颛孙高义
2023-03-14

我正在做这个练习,在这个练习中,我必须交替显示堆栈顶部的元素,然后是底部的元素,直到它是空的。我仍然发现很难利用递归来解决这些练习,我想知道是否有人可以帮助我。我不能使用循环,只是递归。这是说明:“给定stack_t抽象数据类型及其定义的操作:创建,顶部,推送,弹出,元素(返回堆栈中元素的数量),破坏:完成接收堆栈并显示堆栈中交替启动的项的one_and_one函数用顶部元素,然后用底部元素,直到堆栈是空的”。这就是我想出的:

void one_and_one(stack_t* stack){

  if(!stack || elements(stack) == 0) return;

  int aux = top(stack);
  pop(stack);
  one_and_one(stack);
  printf("%i\n", aux);
}

在打印底部之前,我还需要弄清楚如何打印顶部的。我将给出一个例子,以便更好地理解它。如果我有以下堆栈(1是最上面的元素):|1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 |输出必须如下:1,7,2,6,3,5,4。不管怎样,谢谢!

共有1个答案

杜俊风
2023-03-14

如果操作可能是破坏性的——也就是说原始堆栈预计不会保持完整,那么下面是一个算法思想:

  1. 显示堆栈顶部

下面是一个伪代码:

function one_and_one(stack)
    if empty(stack)
        return
    print (pop(stack))        // Step 1
    stack2 = create_stack()   // Step 2
    copy_stack(stack2, stack) // Step 3
    destroy_stack(stack)      // Cleanup
    one_end_one(stack2)       // Step 4


/* This is a helper function for step 3 - recursive as well because no loops allowed*/
function copy_stack(dest, src)
   if not empty(src)
      push(dest, pop(src))

顺便说一句,我觉得把它想象成一个玩具堆叠金字塔是很方便的,你被要求交替取顶部和底部。你拿另一个“空”金字塔。取第一个金字塔的顶部,然后逐个移动到另一个金字塔。重复第二个金字塔。这也暗示了你可以只使用两个堆栈,而不是每次创建一个。

 类似资料:
  • 我正在尝试使用元素构建progressbar。 CSS: 我现在正努力实现每一个其他元素文本都位于:before伪元素之上。现在所有的东西都在before元素下面。我需要改变之间,所以文本不重叠的窗口调整大小。 还有什么我还没考虑过的简单方法吗? 谢谢!

  • 请参阅此小提琴:https://jsfiddle.net/4mxhogmd/1/ 我正在做图表。js如果您在fiddle中看到,您会注意到,在某些情况下,位于条形图顶部的值没有正确显示(超出画布),而我在研究如何在图表上显示数据值时遇到了这个链接。js 但在这里,他们也在同样的情况下使用工具提示来调整条内的文本。我不要这个。 我想要的是,在所有情况下,只在顶部显示值。

  • 以下是完整的问题: 编写一个java方法,它将接受两个排序后的堆栈a和B(最小值在顶部),并返回一个排序后的堆栈D(最小值在顶部)。只允许使用堆栈操作,如pop、push、isEmpty和peek。 示例:假设A={(top)1,4,7,9}和B={(top)2,3,6},那么函数将返回一个新的堆栈D={(top)1,2,3,4,6,7,9} 我写的代码是这样的: 你怎么认为?

  • 问题内容: 在Java中,是否有任何方法可以查看完整的,未截断的堆栈跟踪(例如,通过增加记录的帧数),或者以其他方式查看堆栈跟踪的 底部 ?通常,堆栈跟踪会从顶部截断为1024帧,但是对于堆栈溢出问题,这是毫无价值的,因为您确实需要查看是谁触发了触发递归的调用,位于底部附近。在堆栈 中间 截断会更好,但是显然Sun的JVM不够聪明。 也许甚至一些特定于Sun的特殊标志?我尝试将堆栈大小减小到最小允

  • 我有一个数组包含玩家的名字,我想按照数组的顺序显示每个问题中玩家的名字,例如arrnames['mark','john','jay'],我想和问题1的mark,问题2的john一起显示。 这是我正在尝试的,但我只得到数组中的最后一个值,我如何修复它?

  • 我有一个数组包含玩家的名字,我想按照数组的顺序显示每个问题中玩家的名字,例如arrnames['mark','john','jay'],我想和问题1的mark,问题2的john一起显示。 这是我正在尝试的,但我只得到数组中的最后一个值,我如何修复它?