数组队列——让数组更灵活
程序员文章站
2022-05-12 17:10:03
...
数组的特点
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)入队。
添加元素方法
删除元素方法①
删除元素方法②
修改元素方法①
修改元素方法②
插入元素方法
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; }