我已经有一个stack类在工作,但是现在我每次只能弹出一个元素,我希望能够同时弹出多个元素。无需多次使用推送和弹出。我试图创建两个函数来实现这一点。函数pushAll和popN。比如:
public void pushAll (Object all[]) throws StackFullException {...}
public Object [] popN (int n) throws StackEmptyException {...}
备注:输入参数all是一个数组,包含所有必须输入的元素。向量的最后一个元素必须在叠加后位于顶部。如果没有空间插入所有元素,则必须不插入任何元素,并且必须引发StackFullException异常。popN方法弹出由n参数指定的元素数,并将它们存储到一个数组中以返回。如果堆栈没有请求的元素数,则没有元素被解除堆栈,并引发StackEmptyException异常。我花了好几个小时来研究我的逻辑,但没有成功。以下是我目前为止的Stack课程:
public class Stack extends RuntimeException {
public static final int CAPACITY = 1000;
private int capacity;
private Object elements[];
private int top = -1;
public Stack(int capacity){
if (capacity>0){
this.capacity=capacity;
elements=new Object[capacity];
} else {
this.capacity = CAPACITY;
elements = new Object[CAPACITY];
}
}
public Stack(){
this(CAPACITY);
}
public boolean isEmpty(){
return (top < 0);
}
public boolean isFull(){
return (top == capacity - 1);
}
public void push(Object o) throws StackFullException {
if (isFull()){
throw new StackFullException("Stack Overflow!");
}
else {
top++;
elements[top] = o;
}
}
public Object pop() throws StackEmptyException {
Object elem;
if (isEmpty()){
throw new StackEmptyException("Stack Underflow!");
}
else {
elem = elements[top];
elements[top] = null;
top--;
return (elem);
}
}
public Object top() throws StackEmptyException {
if (isEmpty()){
throw new StackEmptyException("Stack Underflow!");
}
else {
return (elements[top]);
}
}
public int size(){
return (top + 1);
};
public Object[] getElements() {
return elements;
}
@Override
public String toString(){
String string = "[";
for (int i = 0; i < this.capacity; i++){
Object element = this.elements[i];
if(element != null){
string += element + ",";
}
}
string = string.substring(0, string.length() - 1);
string += "]";
return string;
}
public void pushAll (Object all[]) throws StackFullException {
}
public Object [] popN (int n) throws StackEmptyException {
}
}
能帮我建立pushAll和popN功能吗?
没有这样的方式,你可以一次只推送和弹出一个元素,你能做的就是做一个方法,把你要弹出或推送的元素的堆栈和数量传下来,使用循环来实现。
问题内容: 嗨,我正在尝试使用另一个空堆栈反转堆栈(我自己编写了一个堆栈)。由于某种原因,它无法正常工作。谁能帮我这个 ? 问题答案: while(!stack1.isEmpty()){ Integer value = (Integer)stack1.pop(); System.out.println(value); reverse.push(value); }
问题内容: 我正在运行一个用Java在Eclipse中编写的程序。对于很大的输入,该程序具有很深的递归级别。对于较小的输入,程序运行正常,但是在给出较大的输入时,出现以下错误: 可以通过增加Java堆栈大小来解决此问题,如果可以,那么如何在Eclipse中做到这一点? 更新: @乔恩·斯基特 该代码递归地遍历解析树以建立数据结构。因此,例如,代码将使用解析树中的一个节点来做一些工作,并在该节点的两
作为一个系统语言,Rust 在底层运作。如果你有一个高级语言的背景,这可能有一些你不太熟悉的系统编程方面的内容。最重要的一个是内存如何工作,通过栈和堆。如果你熟悉类 C 语言是如何使用栈分配的,这个章节将是一个复习。如果你不太了解,你将会学到这个更通用的概念,不过是专注于 Rust 的。 对于大部分内容,当学习他们的时候,我们会使用一个简化的模型来开始。这使得你可以掌握基础,而不会现在就因为不相关
问题内容: 在Java中,是否有任何方法可以查看完整的,未截断的堆栈跟踪(例如,通过增加记录的帧数),或者以其他方式查看堆栈跟踪的 底部 ?通常,堆栈跟踪会从顶部截断为1024帧,但是对于堆栈溢出问题,这是毫无价值的,因为您确实需要查看是谁触发了触发递归的调用,位于底部附近。在堆栈 中间 截断会更好,但是显然Sun的JVM不够聪明。 也许甚至一些特定于Sun的特殊标志?我尝试将堆栈大小减小到最小允
问题内容: 是局部变量,将其存储在堆或堆栈中的何处? 问题答案: 在堆上。每当您用来创建对象时,它都会在堆上分配。
问题内容: 内核堆栈和用户堆栈有什么区别?为什么要使用内核堆栈?如果在ISR中声明了局部变量,它将存储在哪里?每个进程都有自己的内核堆栈吗?那么,进程如何在这两个堆栈之间进行协调? 问题答案: 内核堆栈和用户堆栈有什么区别? 简而言之,除了在内存中使用不同的位置(并因此为堆栈指针寄存器使用不同的值)之外,什么也没有,而且通常使用不同的内存访问保护。也就是说,在用户模式下执行时,即使映射了内核内存(