可以将第n个元素移到堆栈顶部的堆栈

时间:2019-02-02 01:42:34

标签: java algorithm data-structures

我正在寻找一个Stack数据结构,该结构也允许将第n个元素移到堆栈的顶部。因此,除了pop(),push()和peek()外,我还需要moveToTop(int n)之类的东西,其中栈顶n = 0,栈底n = size-1。

实现该目标的最佳方法是什么?我正在使用Java。

5 个答案:

答案 0 :(得分:2)

在标准堆栈数据结构中没有moveToTop方法,但是如果您想这样做,我想可以实现如下:

public class MyStack<T> extends Stack<T>{

    public synchronized void moveToTop(int n) throws Exception {
        int size = this.size();
        if(n>size) {
            throw new Exception("error position");
        }
        T ele = remove(n);
        push(ele);
    }
}

答案 1 :(得分:1)

为什么要重塑?简单就是堆栈类 https://docs.oracle.com/javase/8/docs/api/java/util/Stack.html 它继承了Vector的remove(int index)。

答案 2 :(得分:0)

您可以创建另一个数组或其他基础结构来临时保存项目。将项目n前面的项目移到其中,将项目向后推,然后将您想要的项目推到顶部。

public class MyStack<T> {
    T items[size];
    ....
    void moveToTop(int n)
    {
        T obj = items[n];
        T[] tempItems = new T[n - 1];
        Arrays.copyOf(items, n - 1);
        System.arraycopy(items, 0, tempItems, 0, n - 1);
        System.arraycopy(tempItems, 0, items, 1, n - 1);
        items[0] = obj;
    }
    ....
}

为简洁起见,删除了其他部分。 您可以检查双重链接列表或跳过列表,而不用烦恼所有这些麻烦事情。

答案 3 :(得分:0)

java.util.LinkedList满足您的要求,因为它们同时为linked list / stack / queue

相关方法:

  • public E remove(int index)
    按索引删除,并获取删除的值。
  • public void push(E e)
    推到顶部。

因此,您需要做的是:

  • 找出索引。
  • 按索引删除它,并获取返回值。
  • 将返回值推到顶部。

答案 4 :(得分:0)

我知道有几种实现堆栈的方法:

-使用Vector的扩展名实现

-使用任何列表组件实施

-将其实现为链接数据结构

-使用基础Java数组实施

我建议您使用基础Java Array来实现它。与他人相比,很难实现,但是对理解逻辑确实很有帮助。