我正在寻找一个Stack数据结构,该结构也允许将第n个元素移到堆栈的顶部。因此,除了pop(),push()和peek()外,我还需要moveToTop(int n)之类的东西,其中栈顶n = 0,栈底n = size-1。
实现该目标的最佳方法是什么?我正在使用Java。
答案 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来实现它。与他人相比,很难实现,但是对理解逻辑确实很有帮助。