首页 > 代码库 > 数据结构之队列java版

数据结构之队列java版

//java由于泛型的擦除,用起来十分不方便

abstract class BaseQueue<T>{
    abstract boolean enQueue(T x);
    abstract T front(T x);//注意这里也要和c++ 区别一下 这里直接返回首部元素
    abstract boolean delQueue();
    abstract void clear();
}
class Queue<T> extends BaseQueue<T>{
    int mMaxSize,mIndexF,mIndexR;
    T []mQueue;
    @SuppressWarnings("unchecked")
    Queue(Class<T> type,int maxSize){
        mMaxSize=maxSize;
        mIndexF=mIndexR=0;
        mQueue=(T[])Array.newInstance(type, maxSize);
    }
    @Override
    boolean enQueue(T x) {
        // TODO Auto-generated method stub
        if(isFull()){
            //over flow
            return false;
        }else{
            mIndexF=(mIndexF+1)%mMaxSize;
            mQueue[mIndexF]=x;
            return true;
        }
    }
    @Override
    T front(T x) {
        // TODO Auto-generated method stub
        if(isEmpty()){
            //emprty
            return null;
        }
        else{
            x=mQueue[mIndexF];
            System.out.println(x);
            return x;
        }
    }

    @Override
    boolean delQueue() {
        // TODO Auto-generated method stub
        if(isEmpty()){
            //empty
            return false;
        }
        else{
            mIndexR=(mIndexR+1)%mMaxSize;
            return true;
        }
    }
    @Override
    void clear() {
        // TODO Auto-generated method stub
        mIndexF=mIndexR=0;
    }
    boolean isFull(){
        if((mIndexR+1)%mMaxSize==mIndexR){
            return true;
        }else{
            return false;
        }
    }
    boolean isEmpty(){
        return mIndexF==mIndexR;
    }
}
public class JBQueue {
    public static void main(String args[]){
        Integer j = 6;
        Queue<Integer> test=new Queue<>(Integer.class, 10);
        test.enQueue(3);
        test.front(j);//由于擦除的原因 直接导致j的值没有变
        System.out.println(test.front(j));
    }
    static int ff(int j){
        j--;
        return j;
    }
}

 

数据结构之队列java版