java循环队列

来源:互联网 发布:如何更新mac系统 编辑:程序博客网 时间:2024/06/13 12:17
public class CycleQueue<E> {private E[] data;private int front;private int rear;@SuppressWarnings("unchecked")public CycleQueue(int capacity){if(capacity <= 0) {System.out.println("初始化队列长度需要大于0");return ;}Object[] obj = new Object[capacity+1];data = (E[]) obj;front = rear = 0;}public boolean isEmpty(){return front == rear;}public boolean isFull(){return (rear+1)%data.length == front;}// 队列的元素个数public int size(){return (rear-front) + data.length*(rear>=front ? 0:1);}//入队public boolean append(E x){if(isFull()) {System.out.println("队列容量已满");return false;} else {rear = (rear+1)%data.length;data[rear] = x;return true;}}// 出队public boolean remove() {if(isEmpty()) {System.out.println("队列已为空");return false;} else{front = (front+1)%data.length;return true;}}//取队头元素public E peek(){if(isEmpty()) {System.out.println("队列为空");return null;} else{return data[ (front+1)%data.length ];}}public void clear(){rear = front = 0;}public String toString(){StringBuffer str = new StringBuffer();str.append("[ size:"+size()+" ]  [ ");int count = size();int start = (front+1) % data.length;while(count > 0){str.append(data[start]+" ");start = (start+1)%data.length;count--;}str.append("]");return str.toString();}public static void main(String[] args){CycleQueue<Integer> queue = new CycleQueue<Integer>(5);queue.append(1);queue.append(2);queue.append(3);queue.append(4);queue.append(5);queue.remove();queue.append(6);queue.remove();queue.append(7);System.out.println( queue.toString() );}}

原创粉丝点击