我正在准备面试。我曾经每天练习几个面试问题。但有时当我无法理解时,我会使用互联网作为引用。
现在,在这个问题中,
问:不使用数据结构,编写一个删除栈中间元素的程序? 现在我停留在第 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);
}
}
最佳答案
这里:
static void deleteMid(Stack<Character> st,int n, int curr)
{
...
char x = st.pop();
您有一个使用局部变量的递归方法。当您再次递归调用同一方法时,将创建另一个方法堆栈。已分配另一个 x
的空间。
这是任何编程语言的基本概念:当您调用函数/方法时,您将为该特定调用保留一定量的内存。这样做就形成了 call stack顺便说一句。
因此,换句话说:通过递归调用此方法,您可以创建一个“临时”存储:每个方法调用都会记住其 x 值。因此,每次调用 deleteMid()
都有其单独的独立字符 x
。因此,当递归调用返回时,“存储”的值仍然在 x
中。
关于java - 为什么 Char 变量在没有声明 char 数组的情况下存储堆栈的过去值?看到代码了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53476623/