简单循环数组实现固定长度的队列——java

队列的操作

队列的主要操作如下(char 类型队列示例):

  • boolean enQueue(char data):在队尾插入一个元素
  • char deQueue():删除并返回队首元素
  • char front():返回队首元素
  • int queueSize():返回队列中元素个数
  • boolean isEmpty():返回队列是否为空

代码实现

需要注意的点见注释

package Queue;

public class ArrayQueue {
	private char[] array;
	private int size;
	private int rear;
	private int front;
	
	public ArrayQueue(int capacity){
		array=new char[capacity];
		size=0;
		rear=front=0;
	}
	public boolean enQueue(char data){
		if(size==array.length){
			return false;
		}
		else{
			array[front]=data;
			front=(front+1+array.length)%array.length;//循环数组处理下标加减时一定先加数组长度,再对数组长度的求余
			size++;
			return true;
		}
	}
	public char deQueue(){
		if(size==0){
			return '!';
		}
		else{
			size--;
			char retu=array[rear];
			rear=(rear+1+array.length)%array.length;
			return retu;
		}
	}
	public char front(){
		if(size==0){
			return '!';
		}
		else{
			return array[(front-1+array.length)%array.length];
		}
	}
	public int queueSize(){
		return size;
	}
	public boolean isEmpty(){
		return (size==0);
	}
	/*public void show(){
		System.out.println("size"+size+" rear"+rear+" front"+front);
        System.out.println(array);//使用字符数组名输出数组
	}*/
}

简单测试

package Queue;

public class TestArrayQueue {
    public static void main(String[] args){
    	ArrayQueue q1=new ArrayQueue(3);
    	q1.enQueue('1');
    	q1.enQueue('b');
    	q1.enQueue('c');
    	System.out.println("队头:"+q1.front());
    	for(int i=0;i<3;i++){
    	 	System.out.print("队尾取出"+q1.deQueue());
    	}
    }
}

输出如下:
队头:c
队尾取出1队尾取出b队尾取出c

队列的其他实现方法

队列实现一共有三种基本方法:

  • 基于简单循环数组实现
  • 基于动态循环数组实现
  • 基于链表实现

其中第一种方法也就是本文使用的方法,实现最简单,但是队列最大长度预先声名且无法改变。
其他两种方法则没有这个限制,这两种方法将在其他文章中进行记录。

发布了14 篇原创文章 · 获赞 0 · 访问量 303

猜你喜欢

转载自blog.csdn.net/zmx1952822326/article/details/100921496