队列是一种先进先出的线性表,只允许在一端插入,另一端删除。允许插入的一端称为队尾,允许删除的一端称为队头
1 import org.junit.jupiter.api.Test;
2
3 /**
4 * 顺序队列
5 * @author wydream
6 *
7 */
8
9 public class QueueSequence {
10
11 private String[] arr;//队列数组
12 private int end=0;//队尾标志
13
14 //向队列中添加元素
15 public void push(String[] arr,String value) {
16 if(end<arr.length) {
17 arr[end]=value;
18 end++;
19 return;
20 }else {
21 System.out.println("队列已经满了");
22 return;
23 }
24
25 }
26
27 //取出队列元素
28 public String pop(String[] arr) {
29 String rs;
30 if(arr[0]==null) {
31 System.out.println("队列为空,请先向队列中添加元素");
32 return null;
33 }else {
34 rs=arr[0];
35 arr[0]=null;
36 move(arr);
37 return rs;
38 }
39 }
40
41 //队列元素向前移动
42 public void move(String[] arr) {
43 for(int i=0;i<arr.length-1;i++) {
44 if(arr[i+1]!=null) {
45 arr[i]=arr[i+1];
46 }else{
47 arr[i]=null;
48 break;
49 }
50 }
51 }
52
53
54
55
56 @Test
57 public void test() {
58 String[] arr=new String[10];
59 push(arr,"北京");
60 push(arr,"上海");
61 push(arr,"广东");
62 push(arr,"杭州");
63 push(arr,"苏州");
64 push(arr,"扬州");
65 pop(arr);
66 pop(arr);
67 pop(arr);
68 pop(arr);
69 }
70
71 }
1 /**
2 * java实现循环队列
3 * @author wydream
4 *
5 */
6
7 import org.junit.jupiter.api.Test;
8
9 public class QueueArray {
10
11 Object[] arr=new Object[10];;//对象数组,队列最多存储a.length-1个对象
12 int front=0;//队首下标
13 int rear=0;//队尾下标
14
15 /**
16 * 将一个对象追加到队列尾部
17 */
18 public boolean enqueue(Object obj) {
19 if((rear+1)%arr.length==front) {
20 return false;
21 }
22 arr[rear]=obj;
23 rear=(rear+1)%arr.length;
24 return true;
25
26 }
27
28 //出队列
29 public Object dequeue() {
30 if(rear==front) {
31 return null;
32 }
33 Object obj=arr[front];
34 front=(front+1)%arr.length;
35 return obj;
36 }
37
38 @Test
39 public void test() {
40 QueueArray q=new QueueArray();
41 System.out.println(q.enqueue("北京"));
42 System.out.println(q.enqueue("上海"));
43 System.out.println(q.enqueue("广东"));
44 System.out.println(q.enqueue("深圳"));
45 for(int i=0;i<4;i++){
46 System.out.println(q.dequeue());
47 }
48 }
49
50
51 }