稀疏数组
public class SparseArray {
public static void main(String[] args) {
int[][] chessArr = new int[11][11];
chessArr[1][2] = 1;
chessArr[2][3] = 2;
chessArr[4][5] = 2;
System.out.println("原始的二维数组");
for (int[] row : chessArr) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
int sum = 0;
for (int[] row : chessArr) {
for (int data : row) {
if (data != 0) {
sum++;
}
}
}
System.out.println("sum=" + sum);
int[][] sparsArr = new int[sum + 1][3];
sparsArr[0][0] = chessArr.length;
sparsArr[0][1] = chessArr[0].length;
sparsArr[0][2] = sum;
int count = 1;
for(int i = 0; i<chessArr.length; i++){
for (int j =0; j<chessArr[0].length;j++){
if (chessArr[i][j]!=0){
sparsArr[count][0] = i;
sparsArr[count][1] = j;
sparsArr[count][2] = chessArr[i][j];
count++;
}
}
}
System.out.println("稀疏数组");
for (int[]row:sparsArr){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
System.out.println("还原的二维数组");
int[][] chessArr2 = new int[sparsArr[0][0]][sparsArr[0][1]];
for (int i = 1; i<=sparsArr[0][2];i++){
chessArr2[sparsArr[i][0]][sparsArr[i][1]] = sparsArr[i][2];
}
for (int[] row:chessArr2){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}
队列的实现
import java.util.Scanner;
public class ArrayQueueDemo {
public static void main(String[] args) {
ArrayQueue arrayQueue = new ArrayQueue(5);
Scanner s = new Scanner(System.in);
boolean loop = true;
while (loop){
System.out.println("a(add):添加数据");
System.out.println("g(get):得到数据");
System.out.println("s(show):显示数据");
System.out.println("q(quit):退出程序");
char text = s.next().charAt(0);
switch (text){
case 'a':
System.out.println("请输入要添加的数据");
arrayQueue.addQueue(s.nextInt());
break;
case 'g':
try{
System.out.println("得到的数据为");
arrayQueue.getQueue();
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 's':
arrayQueue.show();
break;
case 'q':
s.close();
loop = false;
break;
}
}
}
}
class ArrayQueue{
private int maxSize;
private int front;
private int rear;
private int[] arr;
public ArrayQueue(int maxSize){
this.maxSize = maxSize;
this.arr = new int[maxSize];
front = -1;
rear = -1;
}
public boolean isEmpty(){
return front == rear;
}
public boolean isFull(){
return rear == maxSize - 1;
}
public void addQueue(int n){
if (isFull()){
System.out.println("错误:队列已满不能再添加");
return;
}
rear++;
arr[rear] = n;
}
public int getQueue(){
if (isEmpty()){
throw new RuntimeException("队列是空的,不能取出数据");
}
front++;
return arr[front];
}
public void show(){
if (isEmpty()){
System.out.println("队列是空的,没有数据");
return;
}
for (int i = 0; i<arr.length;i++){
System.out.printf("arr[%d] = %d\n",i,arr[i]);
}
}
}
环形队列实现
import java.util.Scanner;
public class CircleArrayQueueDemo {
public static void main(String[] args) {
CircleArrayQueue circleArrayQueue = new CircleArrayQueue(5);
Scanner s = new Scanner(System.in);
boolean loop = true;
while (loop) {
System.out.println("a(add):添加数据");
System.out.println("g(get):得到数据");
System.out.println("s(show):显示数据");
System.out.println("q(quit):退出程序");
System.out.println("h(head):查看队列的第一个数据");
char text = s.next().charAt(0);
switch (text) {
case 'a':
System.out.println("请输入要添加的数据");
circleArrayQueue.addQueue(s.nextInt());
break;
case 'g':
try {
System.out.println("得到的数据为" + circleArrayQueue.getQueue());
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 's':
circleArrayQueue.show();
break;
case 'q':
s.close();
loop = false;
break;
case 'h':
circleArrayQueue.headQueue();
break;
}
}
}
}
class CircleArrayQueue {
private int maxSize;
private int front;
private int rear;
private int[] arr;
public CircleArrayQueue(int maxSize) {
this.maxSize = maxSize;
this.arr = new int[maxSize];
front = 0;
rear = 0;
}
public boolean isEmpty() {
return front == rear;
}
public boolean isFull() {
return (rear + 1) % maxSize == front;
}
public void addQueue(int n) {
if (isFull()) {
System.out.println("错误:队列已满不能再添加");
return;
}
arr[rear] = n;
rear = (rear + 1) % maxSize;
}
public int getQueue() {
if (isEmpty()) {
throw new RuntimeException("队列是空的,不能取出数据");
}
int temp = arr[front];
front = (front + 1) % maxSize;
return temp;
}
public void show() {
if (isEmpty()) {
System.out.println("队列是空的,没有数据");
return;
}
for (int i = front; i < front + (rear - front + maxSize) % maxSize; i++) {
System.out.printf("arr[%d] = %d\n", i % maxSize, arr[i % maxSize]);
}
}
public int headQueue() {
if (isEmpty()) {
throw new RuntimeException("队列是空的,没有数据");
}
return arr[front];
}
}