JAVA实现队列类

本文探讨如何使用Java中的数组和列表实现队列,重点在于理解队列的先进先出(FIFO)特性。通过实例代码,详细展示了队列的插入和删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

和栈一样,队列也是线性的集合。对于队列来说,插入限制在一端,也就是队尾,删除限制在另一端,也就是对头。队列支持先进先出的协议。

本文使用java中的数据和列表来实现队列类,从而更加详细和直观的理解队列的使用和性质。

1、使用数组实现队列

public class QueueWithArray {
	private int [] queueArray;
	private int front = 0;
	private int rear = 0;
	
	public QueueWithArray() {
		this(5);
	}
	
	public QueueWithArray(int queueSize) {
		queueArray = new int [queueSize];
	} 
	
	public void push(int element) {
		if (rear >= front && rear < queueArray.length - 1) {
			queueArray [rear ++] = element;
		}
		else if(rear == queueArray.length - 1 && front == 0) {
			int [] tempArray = new int [queueArray.length * 2];
			System.arraycopy(queueArray, 0, tempArray, 0, queueArray.length);
			queueArray [rear ++] = element;
		}
		else if (front > 0 && rear == queueArray.length - 1) {
			queueArray [rear] = element;
			rear = 0;
		}
		else if (rear < front - 1) 
			queueArray [rear ++ ] = element;
		else if (rear < front && rear == front - 1) {
			loopArrayCopy();
			queueArray [rear ++] = element;
		}
	}
	
	public int pop() {
		if (front == queueArray.length - 1) {
			int reasult = queueArray [front];
			front = 0;
			return reasult;
		}
		else if (front == rear - 1) {
			int reasult = queueArray [front];
			front = 0;
			rear = 0;
			return reasult;
		}
		else
			return queueArray [front ++];
	}
	
	public int peek() {
		return queueArray [front];
	}
	
	public boolean isEmpty() {
		return front == 0 && rear == 0;
	}
	
	public int getSize() {
		if (front < rear)
			return rear - front;
		else if (front > rear) {
			int frontNumber = queueArray.length - front;
			int rearNumber = rear;
			return frontNumber + rearNumber;
		}
		else
			return 0;
	}
	
	private void loopArrayCopy() {
		int [] tempArray = new int [queueArray.length * 2];
		System.arraycopy(queueArray, front, tempArray, 0, queueArray.length - front);
		System.arraycopy(queueArray, 0, tempArray, queueArray.length - front, rear);
		front = 0;
		rear = queueArray.length - 1;
		queueArray = tempArray;
	}
	
	public void clear() {
		rear = 0;
		front = 0;
	}
	
	@Override
	public String toString() {
		String s = " ";
		if (front < rear) {
			for (int index = front; index < rear; index ++) 
				s += (Integer.toString(queueArray [index]) + " ");
			return s;
		}
		else if (front > rear) {
			for (int index = front; index < queueArray.length; index ++)
				s += (Integer.toString(queueArray [index]) + " ");
			for (int index = 0; index < rear; index ++) 
				s += (Integer.toString(queueArray [index]) + " ");
			return s;
		}
		else
			return "The queue is empty";
			
	}
}

为了验证类的正确性下面提供验证程序


public class TestQueueWithArray {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		QueueWithArray queue = new QueueWithArray(4);
		queue.push(1);
		queue.push(2);
		int a = queue.pop();
		System.out.println(a);
		System.out.println(queue.toString());
		queue.push(3);
		queue.push(4);
		queue.push(5);
		System.out.println(queue.getSize());
		queue.push(6);
		System.out.println(queue.getSize());
		System.out.println(queue.toString());
		queue.clear();
		System.out.println(queue.isEmpty());
	}

}

2、使用列表实现队列

import java.util.ArrayList;

public class QueueWithList {
	private ArrayList<Integer> queueList= new ArrayList<>();
	public QueueWithList() {
		
	}
	
	public void add(int number) {
		queueList.add(number);
	}
	
	public int pop() {
		int number = queueList.remove(0);
		return number;
	}
	
	public int peek() {
		return queueList.get(0);
	}
	
	public boolean isEmpty() {
		return queueList.isEmpty();
	}
	
	public int len() {
		return queueList.size();
	}
	
	public void clear() {
		queueList.clear();
	}
	@Override
	public String toString() {
		String s = "";
		for (int index = 0; index < queueList.size(); index ++ ) {
			if (index < queueList.size() - 1) 
				s += (Integer.toString(queueList.get(index)) + " ");
			else
				s += Integer.toString(queueList.get(index));
		}
		return s;
	}
}

测试程序:


public class TestQueue {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		QueueWithList queue = new QueueWithList();
		queue.add(1);
		queue.add(2);
		System.out.println(queue.toString());
		int a = queue.peek();
		System.out.println(a);
		System.out.println(queue.toString());
		System.out.println(queue.len());
		queue.clear();
		System.out.println(queue.isEmpty());
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值