【发布时间】:2021-05-20 17:51:24
【问题描述】:
我正在做这个练习,我必须交替显示堆栈顶部的元素,然后显示堆栈底部的元素,直到它为空。我仍然发现很难利用递归来解决这些练习,我想知道是否有人可以帮助我。我不能使用循环,只能使用递归。 这是说明: “给定 stack_t 抽象数据类型及其定义的操作:create、top、push、pop、elements(返回栈中元素的数量)、destroy: 完成 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。 无论如何,谢谢!
【问题讨论】:
-
我不确定这是否可能。因为如果你想访问堆栈的底部元素,堆栈应该是空的。