数组队列


队列:
说到队列我们得先谈论一下数组这个东西。
数组:我们定义一个数组的时候是一般是这样定义的,定义一个固定长度的数组
int number[]=new int[10];
String names[]=new String [10];
我们用数组来存储一些数据,用
for(int i=0;i<number.length;i++){
number[i]=i;
}
但我们增加的数据元素只能是固定长度的,就像上面,我们只能增加10个元素,但如果我们想要加11个,那我们应该怎么办呢!!!!!还有如果我们增加的元素个数不确定呢!!!
你可能会说我把那个数组的大小设定为足够大就可以了,。不过这样就有些问题,如果我们设定的数组大小不够大,就不能加完我们想要的所以元素,如果我们设定的数组大小过大,而我们要加入的元素只有1,2个,那么就造成了空间浪费。所以就用到了队列。
        int[] shapes= new int[0];//定义一个初始数组
public void add(int shape) {
                //创建一个新的数组,使得这个新数组的长度是原数组的长度加1
int[] newshapes= new int[shapes.length + 1];
                //将新增的元素加到新的数组的末尾
newshapes[shapes.length] = shape;
                //将原数组的元素复制到新的数组中去
for (int i = 0; i < shapes.length; i++) {
newshapes[i] = shapes[i];
}
              //将新数组的地址赋给原数组
shapes= newshapes;
}

这样只要你新加元素,数组的长度就跟着加1 ,这样就使得空间得到合理应用,也解决了,在未知加入多少元素的情况下,实现加入。
下面是画板的图形对象加入队列中,为实现画板的重绘做准备。
<泛型中的<>中拥有的类型有,E--表示元素,K--表示关键字,T表示类型>
/**
* 对列的应用
* 泛型:在定义数据结构类的时候不指定具体的类型,而是通过 A<E> 泛指一种类型
* 在实例化这个类的时候再来指定具体的类型
*
* 增 删 改 查
* @author Administrator
*
*/
public class MyQueue<E> {
/**
*
*/
Object[] yuan = new Object[0];
public int size() {
return yuan.length;
}
/**
*
* @param e加入的新元素
*/
public void add(E shape) {
Object[] newshuzu = new Object[yuan.length + 1];
newshuzu[yuan.length] = shape;
for (int i = 0; i < yuan.length; i++) {
newshuzu[i] = yuan[i];
}
yuan = newshuzu;
}
/**
*
* @param e被插入的元素
* @param index被插入的位置
*/
public void insert(E shape,int index)
{
int i=yuan.length;
Object[] newshuzu = new Object[yuan.length + 1];
for(i=yuan.length;i>index;i--)
{
newshuzu[i]=yuan[i-1];
}
newshuzu[i]=shape;
for(i=index-1;i>=0;i--)
{
newshuzu[i]=yuan[i];
}
yuan=newshuzu;

}
/**
*
*
* @param index删除的 位置
*/
public  void  clear(int index)

{
int i=0;
Object[] newshuzu = new Object[yuan.length - 1];
for ( i = 0; i < index; i++) {
newshuzu[i] = yuan[i];
}
for(i=index+1;i<yuan.length;i++)
{
newshuzu[i-1]=yuan[i];
}
yuan = newshuzu;

}
/**
        *@param 得到元素
        */
public E get(int index){
return (E) yuan[index];
}

}

你可能感兴趣的:(队列)