数组模拟循环队列

package com.queue;

import java.util.Scanner;

import javax.management.JMRuntimeException;

public class CircleArrayQueue {

	public static void main(String[] args) {
		
		//测试
		CircleArrayQueue Queue = new CircleArrayQueue();
		circleArrayQueue queue = Queue.new circleArrayQueue();
 		queue.createCircleQueue(4);
		Scanner scanner = new Scanner(System.in);
		char key = ' ';//用户选择
		boolean loop = true;
		while (loop) {
			System.out.println("*****************************");
			System.out.println("s:显示队列所有元素");
			System.out.println("a:添加元素");
			System.out.println("g:取出元素");
			System.out.println("h:显示队头元素");
			System.out.println("e:退出程序");
			System.out.println("*****************************");
			System.out.println("请输入你的选择");
			key = scanner.next().charAt(0);
			
		
		switch (key) {
		case 's':
			queue.showQueue();
			break;
		case 'a':
			System.out.println("请输入要添加的数据");
			int data = scanner.nextInt();
			queue.addQueue(data);;
			break;
		case 'g':
			try {
				queue.getQueue();
			} catch (Exception e) {
				System.out.println(e.getMessage());
			}
			break;
		case 'h':
			queue.getHead();;
			break;
		case 'e':
			loop = false;
			scanner.close();
			break;
		default:
			break;
		}
		

	}
	}
	//使用数组模拟循环队列
	class circleArrayQueue{
		private int maxSize;//队列最大长度
		private int front;//指向队头
		private int rear;//指向队尾下一个元素
		private int arr[];//用来模拟循环队列的数组
		
		//创造队列
		public void createCircleQueue(int arrMaxSize) {
			maxSize = arrMaxSize;
			front = rear = 0;
			arr = new int[maxSize];
		}
		
		//判断队列是否为空
		public boolean isEmpty() {
			return rear == front;
		}
		
		//判断队列是否已满
		public boolean isFull() {
			return (rear+1) % maxSize == front;
		}
		
		//往队列中添加元素
		public void addQueue(int data) {
			//判断队列是否已满
			if (isFull()) {
				System.out.println("队列已满,不能添加元素");
				return;
			}
			arr[rear] = data;
			rear = (rear + 1) % maxSize;
		}
		
		//队头元素出队列
		private void getQueue() {
			//判断是否为空
			if (isEmpty()) {
				//抛出异常
				throw new RuntimeException("队列为空");
			}
			System.out.println(arr[front]);
			front = (front + 1) % maxSize;
		}
		
		//遍历队列
		private void showQueue() {
			for (int i = front; i < front + size(); i++) {
				System.out.print(arr[i % maxSize] + "\t");
			}
			System.out.println();
		}
		
		//得到队头元素
		public void getHead() {
			System.out.println(arr[front]);
		}
		
		//计算队列中元素个数
		public int size() {
			return (rear + maxSize - front) % maxSize;
		}
		
		
	}
	

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值