数组队列——让数组更灵活

数组的特点
1.数组是相同数据类型的元素的集合
2.数组中的各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起
3.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。

数组的定义
一维数组定义:
1.数据类型[] 数组名=new 数据类型[数组长度];
2.数据类型[] 数组名={数值,...};
3.数据类型[] 数组名=new 数据类型[ ]{数值,...};
二维数组定义:
1.数据类型 [][] 数组名 = new 数据类型[行][列];
2.数据类型 [][] 数组名 = {{值,...},...};
3.数据类型 [][] 数组名 = new 数据类型[][]{{值,...},...};

数组的使用
获取一维数组元素总数:数组名.length;
获取二维数组的行数:数组名.length;
获取二维数组的行的列数:数组名[r].length;
获取一维数组指定位置的数据:数组名[下标];
获取二维数组指定位置的数据:数组名[行下标][列下标];
取得数组某一位置的元素:数组名[索引值](索引值:及数组中元素的位置,从0开始,最大为数组长度-1)

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。
队列可以用数组Q[1…m]来存储,数组的上界m即是队列所容许的最大容量。在队列的运算中需设两个指针:head,队头指针,指向实际队头元素;tail,队尾指针,指向实际队尾元素的下一个位置。一般情况下,两个指针的初值设为0,这时队列为空,没有元素。数组定义Q[1…10]。Q(i) i=3,4,5,6,7,8。头指针head=2,尾指针tail=8。队列中拥有的元素个数为:L=tail-head。现要让排头的元素出队,则需将头指针加1。即head=head+1这时头指针向上移动一个位置,指向Q(3),表示Q(3)已出队。如果想让一个新元素入队,则需尾指针向上移动一个位置。即tail=tail+1这时Q(9)入队。

添加元素方法
public void add(E e){
Object[] newArray=new Object[array.length+1];
for(int i=0;i<array.length;i++){
newArray[i]=array[i];
}
newArray[array.length]=e;
size++;
array=newArray;
}

删除元素方法①
public void delete(E e){
Object[] newArray=new Object[array.length-1];
for(int i=0;i<array.length-1;i++){
if(array[i].equals(e)){
newArray[i]=array[i+1];
for(int j=i+1;j<array.length-1;j++){
newArray[j]=array[j+1];
}
break;
}else
newArray[i]=array[i];
}
array=newArray;
size--;
}

删除元素方法②
public E remove(int index){
if(index<0||index>=size)
return null;
Object[] newArray=new Object[array.length-1];

for(int i=0;i<index;i++){
newArray[i]=array[i];
}
E e=(E)array[index];
for(int i=index+1;i<array.length;i++){
newArray[i-1]=array[i];
}
array=newArray;
size--;
return e;
}

修改元素方法①
public void fixa(E e,E f){
Object[] newArray=new Object[array.length];
for(int i=0;i<array.length;i++){
newArray[i]=array[i];
if(e!=null&&f!=null&&array[i]!=null&&array[i].equals(e)){
newArray[i]=f;
}
for(int j=i+1;j<array.length;j++){
newArray[j]=array[j];
}
}
array=newArray;
}

修改元素方法②
public void fix(E e,int index){
if(index<0||index>=size)
System.out.println("数组越界了!");
Object[] newArray=new Object[array.length];
for(int i=0;i<index;i++){
newArray[i]=array[i];
}
newArray[index]=e;
for(int i=index+1;i<array.length;i++){
newArray[i]=array[i];
}
array=newArray;
}

插入元素方法
public void insert(E e,int index){
if(index<0||index>=size)
System.out.println("数组越界了!");
Object[] newArray=new Object[array.length+1];

for(int i=0;i<index;i++){
newArray[i]=array[i];
}
newArray[index]=e;
for(int i=index+1;i<array.length+1;i++){
newArray[i]=array[i-1];
}
size++;
array=newArray;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值