我需要一个类似deque的数据结构,我认为它被称为循环缓冲区。Java中的循环缓冲区?
这就是我所做的。
public class MyStack {
byte[][] orders = { {0, 1, 2, 3}, {1, 2, 3, 0}, {2, 3, 0, 1}, {3, 0, 1, 2} };
byte state = 0;
int[] data = {1, 2, 3, 4};
void swap(int value){
data[state] = value;
if(state == 3){
state = 0;
}else{
state ++;
}
}
int[] dump(){
int[] output = {
data[ orders[state][0] ],
data[ orders[state][1] ],
data[ orders[state][2] ],
data[ orders[state][3] ],
};
return output;
}
}
这里的输出正是我需要的功能类型。它基本上是一个长度为四的窗口,通过一个无限的离散空间或沿着一条数字线移动。
我的问题是:这个解决方案是否高效?是否有为此功能而设计的内置库?如果是这样,是否值得使用?
没有'push'或'pop'操作 - 这是如何实现堆栈ADT?如果你的数据结构不打算像堆栈那样工作,那么你就会把它弄糊涂,否则你会迷惑人。 – Joni
我不确定一个堆栈的手动实现如何与内置的实现(经过深入审查)相比较。我确实认为真正的问题是你遇到了哪些性能/使用问题?如果实现一个堆栈不是你的目标 - 我相信这是不值得的不使用现有的库的开销。 –
@Joni推送和弹出都在交换中同时完成。 – bigcodeszzer