队列——Java实现

  1 package struct;
  2  
  3 interface IQueue{
  4     //入队列
  5     void add(Object obj);
  6     //出队列
  7     Object remove();
  8     //队列中元素个数(栈大小)
  9     int size();
 10     //判断队列是否为空
 11      boolean isEmpty();
 12      //取队头元素
 13      Object getQueueHead();
 14      //取队尾元素
 15      Object getQueueTail();
 16      //清空队列
 17      void clear();
 18 }
 19 class Factory3{
 20     private Factory3(){}
 21     public static IQueue getIQueueInstance(){
 22         return new LinkQueueImpl();
 23     }
 24 }
 25 class LinkQueueImpl implements IQueue{
 26     Node head;//队列的头
 27     Node tail;//队列的尾
 28     int size;
 29     class Node{
 30         Node prev;
 31         Node next;
 32         Object data;
 33         public Node(Object data) {
 34             super();
 35             this.data = data;
 36         }
 37     }
 38     //入队列(头插)
 39     public void add(Object obj) {
 40         Node newNode = new Node(obj);
 41         //空队列
 42         if(head == null){
 43             head = newNode;
 44             tail = newNode;
 45             size++;
 46         }else{
 47             Node node  = tail;
 48             newNode.next = node;
 49             node.prev = newNode;
 50             tail = newNode;
 51             size++;
 52         }
 53     }
 54     //出队列(尾删)
 55     public Object remove() {
 56         if(isEmpty()){
 57             return "无要删除元素";
 58         }else if(head == tail){
 59             //只有一个元素的队列
 60             size--;
 61             return head.data;
 62         }else{
 63             Node node = head;
 64             head = node.prev;
 65             node.prev = null;
 66             size--;
 67             return head.data;
 68         }
 69     }
 70     //求队列长度
 71     public int size() {
 72         return size;
 73     }
 74     //求队列是否为空
 75     public boolean isEmpty() {
 76         return (size()==0);
 77     }
 78     //取队首元素
 79     public Object getQueueHead() {
 80         return head.data;
 81     }
 82     //取对尾元素
 83     public Object getQueueTail() {
 84         return tail.data;
 85     }
 86     //打印队列
 87     public void print(){
 88         myPrint(head);
 89     }
 90     //队首到对尾打印元素
 91     private void myPrint(Node head){
 92         for(Node node = head;node!=null;node = node.prev){
 93             System.out.print(node.data+" ");
 94         }
 95     }
 96     //置空队列
 97     public void clear() {
 98         if(head == null){
 99             System.out.println("空队列");
100         }else{
101             //非空队列
102             Node node1 = tail;
103             Node node = head;
104             for(node = head;head!=tail;){
105                 head = head.prev;
106                 node.prev = null;
107                 node.data = null;
108                 size--;
109             }
110             node1.next = null;
111             node1.data = null;
112             size--;
113         }
114     }
115 }
116 public class LinkQueue {
117     public static void main(String[] args) {
118         IQueue queue = Factory3.getIQueueInstance();
119         //向下转型
120         LinkQueueImpl queue1 = (LinkQueueImpl)queue;
121         System.out.println("以下为空队列测试情况");
122         System.out.println("================remove测试函数==================");
123         System.out.println(queue.remove());
124         System.out.println("================size测试函数==================");
125         System.out.println(queue.size());
126         System.out.println("================isEmpty测试函数==================");
127         System.out.println(queue.isEmpty());
128         System.out.println("以下为非空队列测试情况");
129         System.out.println("================add和print测试函数==================");
130         queue.add("hello");
131         queue.add("world!");
132         queue.add("hi");
133         queue.add("陕科大!");
134         queue.add("today");
135         queue.add("is");
136         queue.add("4月18号!");
137         queue1.print();
138         System.out.println();
139         System.out.println("================getQueueHead测试函数==================");
140         System.out.println(queue.getQueueHead());
141         System.out.println("================getQueueTail测试函数==================");
142         System.out.println(queue.getQueueTail());
143         System.out.println("================remove测试函数==================");
144         System.out.println(queue.remove());
145         System.out.println(queue.remove());
146         System.out.println("================remove后print测试函数==================");
147         queue1.print();
148         System.out.println();
149         System.out.println("================size测试函数==================");
150         System.out.println(queue.size());
151         System.out.println("================isEmpty测试函数==================");
152         System.out.println(queue.isEmpty());
153         System.out.println("================clear测试函数==================");
154         queue.clear();
155         System.out.println(queue.size());
156     }
157 }
View Code

原文地址:https://www.cnblogs.com/edda/p/12595003.html