Java Stack - 如何从堆栈中弹出()和推送()多个元素?

Posted

技术标签:

【中文标题】Java Stack - 如何从堆栈中弹出()和推送()多个元素?【英文标题】:Java Stack - How do I pop() and push() multiple elements from a stack? 【发布时间】:2021-12-14 04:05:08 【问题描述】:

我已经有一个堆栈类在工作,但现在我每次只能弹出和推送 1 个元素,我希望能够同时推送和弹出多个元素。无需多次使用 push 和 pop 。我正在尝试创建 2 个函数来做到这一点。函数 pushAllpopN。喜欢:

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 函数吗?

【问题讨论】:

我建议你展示你尝试过的东西。 不可能。计算机按顺序或并行运行,但随后您会遇到竞争条件以及其他奇怪的问题。我什至不认为在量子计算机中这是可能的,但我又对此不太了解。 真的是想写Stack extends RuntimeException吗?这对我来说似乎有点奇怪。 【参考方案1】:

没有这样的方法。您一次只能推送和弹出一个元素。您可以做的是创建一个方法,传递您要弹出或推送的元素的堆栈和数量,并使用循环实现它。

【讨论】:

以上是关于Java Stack - 如何从堆栈中弹出()和推送()多个元素?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法找出视图控制器是不是从导航堆栈中弹出?

如何使用堆栈和队列非递归地生成所有可能的n元素集子集?

从 .NET 的 Stack<T> 类中弹出项目会减少内存使用量?

如何从堆栈中弹出视图控制器而不导航到它们

如何在颤动中从导航器堆栈中弹出最后三个路由

当特定 ViewController 类被推入另一个选项卡中的堆栈时,如何从堆栈中弹出视图控制器?