队列

队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作,这称为“出队”,而在队列的尾部(tail)进行插入操作,这个称为“入队”。当队列中没有元素时(head=tail),称为空队列。队列遵循“先进先出”(First In First Out)原则。

  1 package day10;
  2 
  3  
  4 
  5 public class MyQueue {
  6 
  7     private int[] data;//队列中的数据
  8 
  9     private int QueueSize;//队列的大小
 10 
 11     private int head;//队列头部的指针
 12 
 13     private int tail;//队列尾部的指针
 14 
 15  
 16 
 17     public MyQueue(int QueueSize) {
 18 
 19         this.QueueSize = QueueSize;
 20 
 21         data = new int[QueueSize];
 22 
 23         head = -1;
 24 
 25         tail = -1;
 26 
 27     }
 28 
 29  
 30 
 31     /**
 32 
 33      * 判断队列是否已满
 34 
 35      */
 36 
 37     public boolean isFull() {
 38 
 39         return tail == QueueSize - 1;
 40 
 41     }
 42 
 43  
 44 
 45     /**
 46 
 47      * 判断队列是否为空
 48 
 49      */
 50 
 51     public boolean isEmpty() {
 52 
 53         return head == tail;
 54 
 55     }
 56 
 57  
 58 
 59     /**
 60 
 61      * 添加数据到队列
 62 
 63      */
 64 
 65     public void addData(int n) {
 66 
 67         if (isFull()) {
 68 
 69             System.out.println("队列已满!");
 70 
 71             return;
 72 
 73         }
 74 
 75         data[++tail] = n;
 76 
 77     }
 78 
 79  
 80 
 81     /**
 82 
 83      * 显示头部数据
 84 
 85      */
 86 
 87     public void head() {
 88 
 89         if (isEmpty()) {
 90 
 91             throw new RuntimeException("队列是空的");
 92 
 93         }
 94 
 95         System.out.println(data[head + 1]);
 96 
 97     }
 98 
 99  
100 
101     /**
102 
103      * 取出头部的数据
104 
105      */
106 
107     public int popData() {
108 
109         if (isEmpty()) {
110 
111             throw new RuntimeException("队列是空的");
112 
113         }
114 
115         int a = data[++head];
116 
117         data[head] = 0;
118 
119         return a;
120 
121     }
122 
123  
124 
125     /**
126 
127      * 打印全部的数据
128 
129      */
130 
131     public void printData() {
132 
133         if (isEmpty()) {
134 
135             System.out.println("队列是空的");
136 
137             return;
138 
139         }
140 
141         for (int i = 0; i < data.length; i++) {
142 
143             System.out.print(data[i] + "	");
144 
145         }
146 
147     }
148 
149  
150 
151     public static void main(String[] args) {
152 
153         MyQueue queue = new MyQueue(4);
154 
155         queue.addData(1);
156 
157         queue.addData(2);
158 
159         queue.addData(3);
160 
161         queue.addData(4);
162 
163         System.out.println("打印队列的初始数据,数据如下:");
164 
165         queue.printData();
166 
167         System.out.print("此时的头部的数据是");
168 
169         queue.head();
170 
171  
172 
173  
174 
175         queue.popData();
176 
177         System.out.println("");
178 
179         System.out.println("---------弹出第1个后的数据------------------");
180 
181         queue.printData();
182 
183         System.out.print("此时的头部的数据是");
184 
185         queue.head();
186 
187  
188 
189         queue.popData();
190 
191         System.out.println("");
192 
193         System.out.println("---------弹出第2个后的数据------------------");
194 
195         queue.printData();
196 
197         System.out.print("此时的头部的数据是");
198 
199         queue.head();
200 
201  
202 
203         queue.popData();
204 
205         System.out.println("");
206 
207         System.out.println("---------弹出第3个后的数据------------------");
208 
209         queue.printData();
210 
211         System.out.print("此时的头部的数据是");
212 
213         queue.head();
214 
215  
216 
217         queue.popData();
218 
219         System.out.println("");
220 
221         System.out.println("---------弹出第4个后的数据------------------");
222 
223         queue.printData();
224 
225     }
226 
227 }

执行结果:

欢迎批评指正,提出问题,谢谢!
原文地址:https://www.cnblogs.com/xxeleanor/p/14449852.html