尚硅谷Java数据结构学习记录2——用数组模拟单链表

    No enclosing instance of type ArrayQueueDemo is accessible. Must qualify the allocation with an enclosing instance of type ArrayQueueDemo (e.g. x.new A() where x is an instance of ArrayQueueDemo).

在学习过程中 ArrayQueue arrayqueue = new ArrayQueue(3);报错

查资料的时候发现是因为类ArrayQueue没有被static修饰。关于static的用法,它可以修饰静态方法,静态内部类等。主函数main()是一个静态方法,因此为了使用它,类也需要用static修饰。

ps:

关于输出队列的数据,应该是front+1 到rear+1之间的数据

画图可以知道,最重要的是: 只有添加数据rear才会++,只有删除数据,front才会++

package datacode;

import java.util.Scanner;

/*
 * 使用数组模拟队列,需注意
 * 1.必须使用static修饰ArrayQueue类,因为main方法是被static修饰的,否则会报错
 * 2.h和g的操作需要使用try catch,否则会报错
 * 3.显示队列数据的时候,长度应该是front+1 到rear+1之间 因为初始都为1,rear是添加数据的时候增加1,front是删除数据的时候加1
 * 这样操作更加严谨
 */
public class ArrayQueueDemo {
	//构建ArrayQueue类
	
	//注意要用static修饰类ArrayQueue
	static class ArrayQueue{
		private int MaxSize; //表示数组的最大容器
		private int front; //队列头
		private int rear;//队列尾
		private int[] arr; //用于存放数据,模拟队列
		

		
		//判断队列是否满
		public boolean isFull() {
			return rear == MaxSize - 1;
		}
		
		//判断队列是否为空
		public boolean isEmpty() {
			return rear == front;
		}
		
		//添加数据到队列
		public void addQueue(int n ) {
			if(isFull()) {
				System.out.print("队列满,无法添加数据");
				return;
			}
			rear++;
			arr[rear] = n;
		}
		
		//获取队列的数据出队列
		public int getQueue() {
			//判断队列为空
			if(isEmpty()) {
				throw new RuntimeException("队列空,无法读取数据");
			}
			front++;
			return arr[front];
		}
		
		//显示队列中的所有数据
		public void showQueue() {
			if(isEmpty()) {
				System.out.print("队列为空,无数据");
				return; 
			}
			//这里不应该是arr的长度,而应该是rear+1
			for(int i = front+1; i


 

你可能感兴趣的:(数据结构JAVA)