java 数据结构-队列的数组实现:

通过循环队列避免假溢出问题

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  1 package com.cn.sjjg.queue;
  2 
  3 public class MyQueue<T> {
  4     
  5     private T[] datas; //使用数组作为队列元素的容器
  6     
  7     private int maxSize; //队列容量
  8     
  9     private int front;  //头指针
 10     
 11     private int rear;  //尾指针
 12     
 13     //初始化指针
 14     public void initQueue(){
 15         this.front = 0;
 16         this.rear = 0;
 17     }
 18     
 19     //队列初始化:
 20     @SuppressWarnings("unchecked")
 21     public MyQueue(int maxSize){
 22         if(maxSize < 1){
 23             maxSize = 1;
 24         }
 25         this.maxSize = maxSize;
 26         this.front = 0;
 27         this.rear = 0;
 28         this.datas = (T[])new Object[this.maxSize];        
 29     }
 30     
 31     //判断队列状态: 队满,队空
 32     public boolean isNull(){
 33         if(this.front == this.rear){
 34             return true;
 35         } else {
 36             return false;
 37         }
 38     }
 39     
 40     public boolean isFull(){
 41         if((rear + 1) % this.maxSize == front ){
 42             return true;
 43         } else {
 44             return false;
 45         }
 46     }
 47     
 48     //两个操作 : 进队
 49     public boolean push(T data){
 50         if(isFull()){
 51             return false; //队满不发进入
 52         } else{
 53             datas[rear] = data;
 54             rear = (rear + 1) % maxSize ;  //队尾指针+1
 55             return true;
 56         }
 57     }
 58     
 59     //出队
 60     public T pop(){
 61         if(isNull()){
 62             return null ; // 没有可出队元素
 63         } else {
 64             T popData = datas[front];
 65             front = (front+1) % maxSize;
 66             return popData;
 67         }
 68     }
 69     
 70 
 71     public T[] getDatas() {
 72         return datas;
 73     }
 74 
 75     public void setDatas(T[] datas) {
 76         this.datas = datas;
 77     }
 78 
 79     public int getMaxSize() {
 80         return maxSize;
 81     }
 82 
 83     public void setMaxSize(int maxSize) {
 84         this.maxSize = maxSize;
 85     }
 86 
 87     public int getFront() {
 88         return front;
 89     }
 90 
 91     public void setFront(int front) {
 92         this.front = front;
 93     }
 94 
 95     public int getRear() {
 96         return rear;
 97     }
 98 
 99     public void setRear(int rear) {
100         this.rear = rear;
101     }
102     
103     public static void main(String[] args) {
104         MyQueue<Character> myqueue = new MyQueue<Character>(4);  
105         
106          //判断
107         System.out.println("队列是否为空:"+myqueue.isNull());
108         
109         //入队A,B,C
110         myqueue.push('A');
111         myqueue.push('B');
112         myqueue.push('C');
113         
114         System.out.println("队列是否为满:"+myqueue.isFull());
115         
116         //出队
117         Character data1 = myqueue.pop();
118         System.out.println("出队:"+data1);
119         Character data2 = myqueue.pop();
120         System.out.println("出队:"+data2);
121         Character data3 = myqueue.pop();
122         System.out.println("出队:"+data3);
123         Character data4 = myqueue.pop();
124         System.out.println("出队:"+data4);
125     }
126     
127 }

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄