2012-10-19 46 views
1

我有一个任务,我必须创建一个双端队列,但是我不允许使用任何内置的类或接口。我正在使用数组列表来实现我的双端队列。我的问题是,当我有,例如,添加到数组列表的开头(开始排队),我不允许这样做:手动操作ArrayList

public void addFirst(ArrayList<Integer> array) 
{ 
    array.add(0, int); 
} 

有没有办法做到这一点不使用add()函数?比如手动添加到前面并将其余的数组移到右侧?或者也许创建一个新的数组列表并复制......我不确定。任何帮助都会很棒。我有一堆函数可供编写,而完成第一个函数肯定会让我走向正确的方向。谢谢

+9

那么ArrayList也是一个内置的类。 –

+0

另外,您可以在阵列列表的前面添加元素。你为什么要插入'int'?这是一个保留关键字。 –

+0

你还记得你的老师在链表上给出的讲座吗?或者可能...一个固定大小的循环数组缓冲区/队列?这两种数据结构都提供了从列表的前端和末端添加和删除的有效方法。 – goat

回答

2

如果你不允许使用任何内置的列表类,我怀疑你应该看看数组,而不是ArrayList。有像System.arrayCopy这样的功能可以帮助你。

0
class ArrayList<T> 
{ 
    private int _capacity; 
    private int _size; 
    private T _data; 

    ArrayList(int capacity) 
    { 
     _capacity = capacity; 
     _size  = 0; 
     _data  = new T[_capacity]; 
    } 

    void add(T t) 
    { 
     if(_size < _capacity) 
     { 
     _data[_size++] = t; 
     } 
     else 
     { 
     // do it yourself 
     } 
    } 

    void insert(int index, T t) 
    { 
     if(_size < _capacity) 
     { 
     System.arrayCopy(_data, index, _data, index + 1, _size - index); 
     _data[_size++] = t; 
     } 
     else 
     { 
     // do it yourself 
     } 
    } 

    ... 
} 
+0

这是一个家庭作业问题,我们不应该在这里发布完整的作业解决方案。我们应该帮助引导正确的方向,但不做OP作业。 –

+0

这是因为我添加了一些“...”和“自己动手”;-) – Aubin