我正在为面试做准备。我以前每天都练习几个面试问题。但有时,当事情没有得到我,我使用互联网作为参考。
现在在这个问题上说,
Q编写程序删除堆栈的中间元素,而不使用数据结构?现在我卡在第38行,上面写着
char x = st.pop(); 在这里,char是如何存储过去的值,因为它没有提到数组,这是如何可能的。
//Java code to delete middle of a stack
package my.project;
import java.io.*;
import java.util.*;
public class GFG {
public static void main(String args[])
{
Stack<Character> st =
new Stack<Character>();
st.push('1');
st.push('2');
st.push('3');
st.push('4');
st.push('5');
st.push('6');
st.push('7');
deleteMid(st, st.size(), 0);
while (!st.empty())
{
char p=st.pop();
System.out.print(p + " ");
}
}
static void deleteMid(Stack<Character> st,int n, int curr)
{
if (st.empty() || curr == n)
return;
char x = st.pop();
deleteMid(st, n, curr+1);
if (curr != n/2)
st.push(x);
}
} 发布于 2018-11-26 07:47:09
在此:
static void deleteMid(Stack<Character> st,int n, int curr)
{
...
char x = st.pop(); 您有一个使用局部变量的递归方法。当您再次递归调用同一方法时,将创建另一个方法堆栈。为分配了另一个 x的空间。
这是任何编程语言的基本概念:当您调用一个函数/方法时,您将为该特定调用保留一定数量的内存。这样就形成了调用堆栈。
因此,换句话说:通过递归调用此方法,您可以创建一个“临时”存储:每个方法调用都会记住的值x。因此,每个对deleteMid()的调用都有各自独立的char x。因此,当递归调用返回时,“存储的”值仍然在x中。
发布于 2018-11-26 09:06:38
您的程序使用递归调用'deleteMid()‘。我建议您阅读递归树概念。理解递归方法的最好方法是使用Fibonacci程序并绘制递归树。
您需要了解与每个递归调用相关联的存储值。
char x = st.pop(); 对于每个递归调用,以及当您到达终止条件时,x都有不同的值。
if (st.empty() || curr == n)
return; 递归调用遍历回并执行语句
if (curr != n/2)
st.push(x);
}https://stackoverflow.com/questions/53476623
复制相似问题