稀疏数组
package Datastructures;
public class SparseArray {
public static void main(String[] args) {
//创建11行11列的二维数组·
int[][] chessArr1=new int[11][11];
//给数组的四个节点赋值,其余节点默认为零
chessArr1[1][2]=1;
chessArr1[2][3]=2;
chessArr1[5][9]=1;
chessArr1[7][5]=2;
System.out.println("二维数组如下:");
//用增强for循环遍历二维数组
for(int[] row:chessArr1){
for(int x:row){
System.out.print(x+"\t");
}
System.out.println("");
}
//稀疏数组
int sum=0; //sum为二维数组中不为零节点的个数
//双重增强for循环求sum
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j <chessArr1[i].length ; j++) {
if(chessArr1[i][j]!=0){
sum++;
}
}
}
//定义稀疏数组
int[][] dataArr=new int[sum+1][3];
//稀疏数组的第一行的三个节点分别存二维数组行数、列数、不为零节点个数
dataArr[0][0]=11;
dataArr[0][1]=11;
dataArr[0][2]=sum;
//设置计数器
int count=1;
//建立稀疏数组
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j <chessArr1[i].length ; j++) {
if(chessArr1[i][j]!=0){
//每找到一个不为零节点,将其行号列号以及值存入稀疏数组
dataArr[count][0]=i;
dataArr[count][1]=j;
dataArr[count][2]=chessArr1[i][j];
//计数器加一
count++;
}
}
}
System.out.println("稀疏数组:");
System.out.println("row\t"+"col\t"+"val\t");
for (int i = 0; i <dataArr.length ; i++) {
for (int j = 0; j < dataArr[i].length; j++) {
System.out.print(dataArr[i][j]+"\t");
}
System.out.println("");
}
//稀疏数组转二维数组
System.out.println("稀疏数组转二维数组:");
int[][] chessArray2=new int[dataArr[0][0]][dataArr[0][1]];
for (int i = 1; i < dataArr.length; i++) {
chessArray2[dataArr[i][0]][dataArr[i][1]]=dataArr[i][2];
}
for(int[] row:chessArray2){
for(int x:row){
System.out.print(x+"\t");
}
System.out.println("");
}
}
}
输出结果:
队列
public class ArrayQueueDemo {
public static void main(String[] args) {
ArrayQueue a=new ArrayQueue(5);
a.add(3);
a.add(6);
a.add(7);
a.add(9);
a.add(9);
a.showQueue();
}
}
class ArrayQueue{
private int maxsize;
private int front;
private int rear;
private int[] arr;
public ArrayQueue(int maxsize){
this.maxsize=maxsize;
arr=new int[maxsize];
front=-1;
rear=-1;
}
public boolean isFull(){
return rear==maxsize-1;
}
public boolean isEmpty(){
return rear==front;
}
public void add(int n){
//判断队列是否满了
if(isFull()){
System.out.println("队列已满!不能继续加入数据");
return;
}
arr[++rear]=n;
}
//获取队列数据,出队列
public int getQueue(){
if (isEmpty()){
//有返回值,所以此处抛出异常处理
throw new RuntimeException("队列为空!");
}
front++;
return arr[front];
}
//显示队列所有数据
public void showQueue(){
if(isEmpty()){
System.out.println("队列为空,无法遍历!");
return;
}
for (int i = 0; i < arr.length; i++) {
System.out.printf("arr[%d]=%d\n",i,arr[i]);
}
}
}
输出结果