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
  • 相关阅读:
    CI 知识 :Git介绍及常用操作
    虚拟机的迁移(热迁移)
    kvm虚拟化网络管理
    Zabbix -----安装
    Mariadb 主从
    keepalived + lvs marster 与 backup 之间的 高可用
    LVS 负载均衡 (VS/DR模式 与 VS/TUN 模式)
    linux下部署tomcat 上线jpress博客系统
    docker (2)---存储、网络(利用docker容器上线静态网站)
    openstack(2) -------RabbitMQ集群部署
  • 原文地址:https://www.cnblogs.com/ywx-vashon/p/4895790.html
Copyright © 2011-2022 走看看