为此问题选择正确的数据结构:循环链表,列表,数组或其他内容

Joa*_*nge 1 .net c# performance data-structures

我的要求是每种类型T,我有许多元素(在1-30 +之间),首先我需要随机项目,然后我需要下一个,当我到达最后一个项目时,它应该返回第一个一个等等.

所以说T是Icon,而集合是Images(实例).

我希望有:

// program start:

Icon icon = RandomIcon(); // say 5th one for this case

// user clicks next icon:

icon = current++; (6, 7, 8, 1, 2, ...)
Run Code Online (Sandbox Code Playgroud)

对我来说,循环链表是有意义的,除了我必须做O(n),其中n是随机索引.

我希望得到最清洁,最好的实施,因此这个问题.

Gav*_*ler 5

另一种可能的解决方案是创建一个链接列表,其底层数据结构是一个数组.这样你就可以在O(1)处索引,同时保持你的"圆度"

public class myLL
{
    private T[] items;
    private int i;
    private int max_size;

    public T GetCurrent() {
        return items[i];
    }

    public T GetNext() {
        i = i++ % max_size;
        return items[i];
    }
}
Run Code Online (Sandbox Code Playgroud)