数据结构与算法 队列的数组实现

Java数据结构和算法
上一篇 主目录 下一篇
package queue;

import java.util.Scanner;

public class ArrayQueue {

		//测试代码
		public static void main(String[] args) {
			int MAXSIZE=5;
			ArrayQueueClass queue=new ArrayQueueClass(MAXSIZE);
			char key=' ';
			Scanner scanner=new Scanner(System.in);
			boolean loop=true;
			while(loop) {
				System.out.println("s(show): 显示队列");
				System.out.println("e(exit): 退出程序");
				System.out.println("a(add): 添加数据到队列");
				System.out.println("o(out): 从队列取出数据");
				System.out.println("g(get): 查看队列头的数据");
				key = scanner.next().charAt(0);//接收一个字符
				switch (key) {
				case 's':
					queue.showQueue();
					break;
				case 'a':
					System.out.println("输出一个数");
					int value = scanner.nextInt();
					queue.addQueue(value);
					break;
				case 'o': //取出数据
					try {
						int res = queue.outQueue();
						System.out.printf("取出的数据是%d\n", res);
					} catch (Exception e) {
						// TODO: handle exception
						System.out.println(e.getMessage());
					}
					break;
				case 'g': //查看队列头的数据
					try {
						int res = queue.getHeadQueue();
						System.out.printf("队列头的数据是%d\n", res);
					} catch (Exception e) {
						// TODO: handle exception
						System.out.println(e.getMessage());
					}
					break;
				case 'e': //退出
					scanner.close();
					loop = false;
					break;
				default:
					break;
				}
			}
			
			System.out.println("程序退出~~");
		}
	}


class ArrayQueueClass{
	private int[] arr;
	private int MAXSIZE;
	private int front;
	private int rear;
	
	// 创建队列的构造器
	ArrayQueueClass(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 boolean addQueue(int x) {
		if(isFull()) {
			throw new RuntimeException("full");
		}
		arr[++rear]=x;
		return true;
	}

	// 获取队列的数据, 出队列
	public int outQueue() {
		if(isEmpty()) {
			throw new RuntimeException("empty");
		}
		int rs=arr[front+1];
		for(int i=front+2;i<=rear;i++) {
			arr[i-1]=arr[i];
		}
		rear--;
		return rs;
	}

	// 显示队列的所有数据
	public void showQueue() {
		if(isEmpty()) {
			System.out.println("empty");
		}else {
			for(int i=front+1;i<=rear;i++) {
				System.out.printf("%d\t",arr[i]);
			}
		}
	}
	// 显示队列的头数据, 注意不是取出数据
	public int getHeadQueue() {
		if(isEmpty()) {
			throw new RuntimeException("empty");
		}else {
			int p=front+1;
			return arr[p];
		}
	}
}

你可能感兴趣的:(Java)