队列
队列是一种特殊的线性结构,它只允许在队列的首部(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] + "\t"); 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 }
执行结果:
欢迎批评指正,提出问题,谢谢!