java算法-單向隊列

隊列是一種:先進先出,後進後出的數據結構數組

單項隊列: 從前面刪除元素,從後面插入元素,跟現實中排隊是同樣的道理數據結構

這裏咱們用指針移動位置的方法。由於數組刪除元素,若是咱們要跟現實中排隊效果同樣,就須要移動數組,很浪費時間和空間。app

因此:spa

>添加元素時,當尾部到達數組末尾的時候,咱們就把他指向頭部指針

>刪除元素時,當頭部到達數組末尾的時候,咱們就把頭部重置,即指向0code

package com.ghostwu;

class Queue {
    
    private Object[] queueArr;
    private int maxSize; //總大小
    private int front; //
    private int rear;  //
    private int realNums; //隊列真實長度
    
    public Queue( int _n ){
        maxSize = _n;
        queueArr = new Object[maxSize];
        front = 0;
        rear = -1;
        realNums = 0;
    }
    
    public void append( int value ){
        if( isFull() ){
            System.out.println( "隊列滿了" );
        }else {
            if( rear == maxSize - 1 ){ //尾部滿了,把指針指到頭部
                rear = -1;
            }
            queueArr[++rear] = value;
            realNums++;
        }
    }
    
    public Object shift(){
        Object value = null;
        if( !isEmpty() ){
            value = peekFront();
            queueArr[front] = null;
            front++;
            if( front == maxSize ){
                front = 0;
            }
            realNums--;
        }
        return value;
    }
    
    public Object peekFront(){
        return queueArr[front];
    }
    
    public boolean isFull(){
        return realNums == maxSize;
    }
    
    public boolean isEmpty(){
        return realNums == 0;
    }
    
    public int getSize(){
        return realNums;
    }
    
    public void print(){
        for( int i = 0; i < queueArr.length; i++ ){
            System.out.print( queueArr[i] + "\t" );
        }
    }
}

public class MyQueue {

    public static void main(String[] args) {
        
        Queue q = new Queue( 5 );
        q.append( 10 );
        q.append( 20 );
        q.append( 30 );
        q.append( 40 );
        q.append( 50 );
        
        System.out.println( q.peekFront() );
        System.out.println( q.getSize() );
        q.shift();
        System.out.println( q.peekFront() );
        q.print();
        q.append( 100 );
        q.append( 200 );
    }

}
相關文章
相關標籤/搜索