zoukankan      html  css  js  c++  java
  • 循环队列操作

    package com.ywx.count;
    
    /**
     * 循环队列操作:
     * 入队时:将新元素插入rear所指的位置的后一位。
     * 出队时:删去front所指的元素,然后将front加1并返回被删元素。
     * @author Vashon
     * date:20150402
     * @param <T>
     */
    public class CirQueue<T> {
    	T[] a;  //对象数组,队列最多存储a.length-1个对象
    	//默认初始化大小
    	private static final int DEFAULT_SIZE=10;
    	int front;//首小标
    	int rear;//尾下标
    	public CirQueue(){
    		this(DEFAULT_SIZE);
    	}
    	/**
    	 * 初始化指定长度的队列
    	 * @param size
    	 */
    	@SuppressWarnings("unchecked")
    	public CirQueue(int size) {
    		a=(T[]) new Object[size];
    		front=0;
    		rear=0;
    	}
    	/**
    	 * 将一个对象追加到队列的尾部
    	 * @param obj
    	 * @return 队列满是返回false,否则返回true
    	 */
    	public boolean enqueue(T obj){
    		if((rear+1)%a.length==front){
    			return false;
    		}else{
    			a[rear]=obj;
    			rear=(rear+1)%a.length;//取模后剩余的赋值给rear
    			return true;
    		}
    	}
    	/**
    	 * 队列头部出栈
    	 * 出栈要返回一个类型的实例内容
    	 * @return
    	 */
    	public T dequeue(){
    		if(rear==front){
    			return null;
    		}else{
    			T obj=a[front];
    			front=(front+1)%a.length;
    			return obj;
    		}
    	}
    	/**
    	 * 队列的长度
    	 * @return
    	 */
    	public int size(){
    		if(rear>front){
    			return rear-front;//return (rear-front)&(a.length-1)
    		}else{
    			return a.length-1;
    		}
    	}
    	/**
    	 * 判断是否为空
    	 * @return
    	 */
    	public boolean isEmpty(){
    		return rear==front;
    	}
    	public static void main(String args[]){
    		CirQueue<String> queue=new CirQueue<String>(4);
    		queue.enqueue("1");//入栈
    		queue.enqueue("2");//入栈
    		queue.enqueue("3");//入栈
    		queue.enqueue("4");//入栈
    		System.out.println("size="+queue.size());
    		int size=queue.size();
    		System.out.println("********出栈操作********");
    		for(int i=0;i<size;i++){
    			System.out.println(queue.dequeue()+" ");//出栈
    		}
    	}
    }
    


    版权声明:本文为博主原创文章,未经博主允许不得转载。

    Stay Hungry, Stay Foolish, Walking in Life
  • 相关阅读:
    【剑指offer】面试题40:数组中只出现一次的数字
    【剑指offer】面试题39扩展:平衡二叉树
    【剑指offer】面试题39:二叉树的深度
    【剑指offer】面试题38:数字在排序数组中出现的次数
    【剑指offer】面试题37:两个链表的第一个公共结点
    【剑指offer】面试题36:数组中的逆序对
    剑指Offer
    设计模式
    ACM
    算法设计与分析
  • 原文地址:https://www.cnblogs.com/ywx-vashon/p/4895790.html
Copyright © 2011-2022 走看看