队列结构——先进后出,通过(isFull(),isEmpty(),add(int value),remove(),peek()来实现对应的判断是否满,空,添加,删除,回显队头的功能)
基本结构
public class Queue { int[] arr; int maxSize;//最大容量 int front;//队头指针 int rear;//队尾指针 int flag;//判断空,满 public Queue(int maxSize) { this.maxSize = maxSize; arr = new int[maxSize]; front = -1; rear = -1; flag = 0; } }
1,判断队列空,满
//队满 public boolean isFull() { return (rear==front&&flag==1)||(rear==maxSize-1&&front==-1); } //队空 public boolean isEmpty() { return rear==front&&flag==0; }
队满时有两种情况,一种是一开始添加元素到队满,另一种是删除某一元素后再添加分别对应或语句的后面和前面。
2,入队操作
//入队 public void add(int value) { if(isFull()) { System.out.println("队满"); return; } rear = (rear+1)%arr.length; arr[rear] = value; flag = 1; }
这里是用余除来进行循环队列,且flag值改为1,队列满只有在添加元素之后。
3,出队操作
//出队 public int remove() { if(isEmpty()) { throw new RuntimeException("队空"); } front = (front+1)%arr.length; flag = 0; return arr[front]; }
同样用余除来进行循环队列,且flag值改为0,队列空只有在删除元素之后,且判断空时,为避免返回值的麻烦使用异常处理。
4,查看队头元素
//查看队头元素 public int peek() { if(isEmpty()) { throw new RuntimeException("队空"); } return arr[(front+1)%arr.length]; }
同样判断空时,为避免返回值的麻烦使用异常处理。
测试
public class Test { public static void main(String[] args) { Queue queue = new Queue(5); queue.add(1); queue.add(2); queue.add(3); queue.add(4); queue.add(5); queue.add(6); System.out.println(queue.remove()); queue.add(5); System.out.println(queue.remove()); System.out.println(queue.peek()); System.out.println(queue.remove()); System.out.println(queue.remove()); System.out.println(queue.remove()); System.out.println(queue.remove()); } }
数据结构——队列(数组)
最新推荐文章于 2024-10-07 17:39:40 发布