(Java数据结构和算法)队列-----队列本质原理实现+ArrayDeque类实现

自定义队列


class MyQueue{
	private int SIZE;//队列容量
	private int[] a;
	private int front;//队头指针
	private int rear;//队尾指针
	private int size;//队列当前元素数目

	public MyQueue(int SIZE){
		this.SIZE = SIZE;
		a = new int[SIZE];
		front = 0;
		rear = -1;
		size = 0;
	}

	public boolean insert(int e){
		if(rear == SIZE - 1){
			//队列已经满了,不能再插入了
			return false;	
		}else{
			a[++rear] = e;
			size++;
			return true;
		}
	}

	public int  remove() throws Exception{
		try{
			if(rear==-1){
				//队列如果是空的,就无法移除队头,应该抛出异常
				throw new Exception("队列为空的情况下仍试图移除队头元素!");
			}
		}catch(Exception e){
			System.out.println("队列为空的情况下仍试图移除队头元素!");
			e.printStackTrace();
		}
		{
			int tmp = a[0];
			for(int i = 1; i < size; i++){
				a[i-1] = a[i];
			}
			size -= 1;
			return tmp;
		}
	}

	public int peek() throws Exception{
		try{
			if(rear==-1){
				//队列如果是空的,就无法得到队头,应该抛出异常
				throw new Exception("队列为空的情况下仍试图获取队头元素!");
			}
		}catch(Exception e){
			System.out.println("队列为空的情况下仍试图获取队头元素!");
			e.printStackTrace();
		}
		return a[0];
	}

	public boolean isEmpty(){
		return size == 0;
	}

	public boolean isFull(){
		return size == SIZE;
	}

	public int size(){
		return size;
	}

	public void print(){
		for(int i = 0; i < size; i++){
			System.out.print(a[i] + " ");
		}
		System.out.println();
	}
}

public class Main{
	public static void main(String[] args){
		MyQueue queue = new MyQueue(10);
		System.out.println("入队:");
		queue.insert(1);
		queue.print();
		queue.insert(2);
		queue.print();
		queue.insert(3);
		queue.print();
		queue.insert(4);
		queue.print();
		queue.insert(5);
		queue.print();
		try{
			System.out.println("队头:"+queue.peek());
		}catch(Exception e){
			System.out.println("队列为空的情况下仍试图获取队头元素!");
		}
		System.out.println("出队:");
		while(!queue.isEmpty()){
			queue.print();
			try{
				queue.remove();
			}catch(Exception e){
				System.out.println("队列为空的情况下仍试图移除队头元素!");
			}
		}
		System.out.println("队列空吗?"+queue.isEmpty());
	}
}

ArrayDeque类实现队列操作

import java.util.ArrayDeque;
import java.util.Iterator;

public class Main{
	public static void print(ArrayDeque<Integer> queue){
		Iterator it = queue.iterator();
		while(it.hasNext()){
			System.out.print(it.next()+" ");
		}
		System.out.println();
	}

	public static void main(String[] args){
		ArrayDeque<Integer> queue = new ArrayDeque<Integer>();
		System.out.println("入队:");
		queue.addLast(1);
		Main.print(queue);
		queue.addLast(2);
		Main.print(queue);
		queue.addLast(3);
		Main.print(queue);
		queue.addLast(4);
		Main.print(queue);
		queue.addLast(5);
		Main.print(queue);

		System.out.println("队头:"+queue.peek());
		System.out.println("出队:");
		while(!queue.isEmpty()){
			print(queue);
			queue.remove();
		}
		System.out.println("队列空吗?"+queue.isEmpty());
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值