首页 > 代码库 > 队列的实现

队列的实现

首先来了解下队列的特点:

  First in First out: 先进先出

  在对列中有两种存储方式

  其一是按顺序存储,也就是用数组进行存储

  其二是按链式存储,也就是按链表来进行存储

 

其一:

public class CirQueue<E> {    //对象数组,队列最多存储a.length-1个对象    E[] a;    //默认初始化大小    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=(E[])(new Object[size]);        front=0;        rear=0;    }        /**     * 将一个对象追加到队列尾部     * @param obj     * @return 队列满时返回false,否则返回true     * @author yaobo     */    public boolean enqueue(E obj){        if((rear+1)%a.length==front){            return false;        }else{            a[rear]=obj;            rear=(rear+1)%a.length;            return true;        }    }        /**     * 队列头部出队     * @return     * @author yaobo     */    public E dequeue(){        if(rear==front)            return null;        else{            E obj =a[front];            front=(front+1)%a.length;            return obj;        }    }             //队列长度    public int length(){        if(rear>front){            return rear-front;        }else            return a.length-1;    }        /**     * 判断是否为空      * @return     * @author yaobo     */    public boolean isEmpty(){        return rear==front;    }        public String toString(){        StringBuffer sb=new StringBuffer();        sb.append("[");        for(int i=front;i<rear;i++){            if(a[i]!=null){                sb.append(a[i]+",");            }        }        sb.delete(sb.length()-1, sb.length());        sb.append("]");        return sb.toString();    }        public static void main(String[] args) {        CirQueue<String> queue=new CirQueue<String>(7);        queue.enqueue("1");        queue.enqueue("2");        queue.enqueue("3");        queue.enqueue("4");        queue.enqueue("5");        System.out.println(queue);        System.out.println("size="+queue.length());        int size=queue.length();        System.out.println("*******出栈操作*******");        for(int i=0; i<size;i++){            System.out.println("size="+queue.length());            System.out.println(queue.dequeue()+" ");            System.out.println(queue);        }            }    }

其二:

/* * 链式存储队列 */public class LinkQueue<T> {          //创建一个链表结构    private class Node{        public T data ;        public Node next;                //创建无参构造方法        public Node(){                    }                Node(T data,Node next){            this.data=http://www.mamicode.com/data;            this.next=next;        }    }        private Node front;    private Node rear;    private int size;        //构造方法,创建队列    public LinkQueue(){        front=new Node(null,null);        rear=new Node(null,null);        front=rear;        size=0;    }        //入队列操作    public void Enqueue(T data){        Node d=new Node(data,null);        rear.next=d;        rear=d;        size++;    }        //出队列操作    public T DeQueue(){        if(rear==front){            return null;        }        Node p=new Node(null,null);        p=front.next;        T data=p.data;        if(p.next==null){            rear=front;        }        front.next=p.next;        p=null;        size--;        return data;            }        //判断长度    public int Size(){        return size;    }        //判断是否为空    public boolean isEmpty(){        if(rear==front){            return true;        }        return false;    }        public String toString() {          if(isEmpty()){              return "[]";          }else{              StringBuilder sb = new StringBuilder("[");              for(Node current=front.next;current!=null;current=current.next){                  sb.append(current.data.toString() + ", ");              }              int len = sb.length();              return sb.delete(len - 2, len).append("]").toString();          }      }             public static void main(String arg[]){        LinkQueue queue=new LinkQueue();        queue.Enqueue(1);        queue.Enqueue(2);        queue.Enqueue(3);        queue.Enqueue(4);        System.out.println(queue);        System.out.println("队列长度:"+queue.Size());        System.out.println("出队:"+queue.DeQueue());        System.out.println("队列长度="+queue.Size());        System.out.println(queue);        System.out.println("出队:"+queue.DeQueue());        System.out.println("队列长度="+queue.Size());        System.out.println(queue);        System.out.println("出队:"+queue.DeQueue());        System.out.println("队列长度="+queue.Size());        System.out.println(queue);            }}

 

队列的实现