【发布时间】:2016-06-11 08:09:00
【问题描述】:
我需要一个类似双端队列的数据结构,我相信它被称为循环缓冲区。
这就是我所做的。
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;
}
}
这里的输出正是我需要的功能类型。它基本上是一个长度为 4 的窗口,通过无限的离散空间或沿数轴移动。
我的问题是:这个解决方案有效吗?是否有为此功能设计的内置库?如果是这样,是否值得使用?
【问题讨论】:
-
没有
push或pop操作-这是如何实现堆栈ADT?如果您的数据结构不打算像堆栈一样工作,请调用其他名称,否则您会混淆人们。 -
我不确定堆栈的手动实现与内置实现(经过大量审查)相比如何。我确实认为真正的问题是您遇到了哪些性能/使用问题?如果实现堆栈不是您的目标 - 我相信不使用现有库的开销是不值得的。
-
@Joni 在swap中push和pop都是同时完成的。
-
@Joni 好的,我明白你在说什么。我想 is 并不是真正的堆栈。
-
这不是堆栈。更多的是“最近添加的固定长度的整数缓冲区”。坦率地说,对于 4 个整数,我真的怀疑任何实现都可能成为应用程序的性能瓶颈。不过,我觉得这个实现并不是特别优雅:由于硬编码的订单数组,它并不是真正可扩展的。您可以只使用状态来创建一个转储,其中包含数据数组的末尾与其开头连接。
标签: java optimization data-structures stack deque