栈,队列,并查集等算法工具实现(2)

来源:互联网 发布:spss数据录入教程 编辑:程序博客网 时间:2024/06/07 09:51
接上篇,实现一下队列:

API定义如下

package lee.tools;public interface Queue<T>{boolean isEmpty();   //是否为空void enQuene(T data);  //入队T deQueue();           //出队}

循环队列实现代码:

package lee.tools;public class CircleQueue<T> implements Queue<T>{T arr[];int size;public int front;public int rear;@SuppressWarnings("unchecked")public CircleQueue(){size=5;arr = (T[]) new Object[size];}@Overridepublic boolean isEmpty() {if(front==rear){return true;}else{return false;}}public boolean isFull(){if(front==(rear+1)%size){return true;}else{return false;}}
//  如果队列空间不够用,扩大一倍public void enLargeQueue(){            @SuppressWarnings("unchecked")T[] newArry = (T[]) new Object[size*2];for(int i=0;i<size;i++){newArry[i] = arr[i];}this.size = size*2;arr = newArry;}@Overridepublic void enQuene(T data) {if(isFull()){enLargeQueue();}arr[rear]=data;rear = (rear+1)%size;}@Overridepublic T deQueue() {if( isEmpty() ){System.out.println("the Queue is empty"); return null;}T key=arr[front];front=(front+1)%size;return key;}}

链接队列实现如下:

package lee.tools;public  class LinkedQueue<T> implements Queue<T>{Node<T> head;Node<T> tail;int size;public boolean isEmpty(){if(head==null){return true;}else{return false;}}public void enQuene(T data){if(head==null){head = new Node<T>(data);tail=head;}else{tail.next=new Node<T>(data);tail = tail.next;}}public T deQueue(){if(!isEmpty()){T temp =head.data;head = head.next;return temp;}else return null;}class Node<T>{T data;Node<T> next;Node(T d){data = d;}}}


0 0