LinkedList没有动态内存分配

时间:2015-11-18 08:16:29

标签: arrays algorithm data-structures static

让我们假设我们使用的是没有动态内存的开发环境(只有固定边界的静态数组)。如何实现List(或ArrayList)。 好吧,当我试图将元素添加到完整数组时,我已经想到了创建更大尺寸的新数组,但我希望有更有效的方法。 P.S我不是要求实施,我要求提出想法:)

1 个答案:

答案 0 :(得分:2)

您可以查看Sedgewick关于动态数组的文档并调整它们的大小。您可以在Dynamic Array - Wikipedia中查看总体提示,并在this paper which is written by Sedgewick中查看更详细的定义 ResizingArrayQueue by Sedgewick

中还有一个示例

虽然该示例用于队列,但您也可以将此机制用于链接列表。 在这个样本中,当它达到极限时,他的大小加倍。

public void enqueue(Item item) {
        // double size of array if necessary and recopy to front of array
        if (N == q.length) resize(2*q.length);   // double size of array if necessary
        q[last++] = item;                        // add item
        if (last == q.length) last = 0;          // wrap-around
        N++;
    }

当极限减少到阵列的四分之一时,他将阵列减半。

 public Item dequeue() {
        if (isEmpty()) throw new NoSuchElementException("Queue underflow");
        Item item = q[first];
        q[first] = null;                            // to avoid loitering
        N--;
        first++;
        if (first == q.length) first = 0;           // wrap-around
        // shrink size of array if necessary
        if (N > 0 && N == q.length/4) resize(q.length/2); 
        return item;
    }