java实现循环队列

1.队列的定义及特点
队列(queue)是指允许在一端进行插入操作,在另一端进行删除操作的线性表
特点:1.队列是一种先进先出的线性表
2.允许插入的一端称之为队尾,允许删除的一端称之为队头
队列是操作受到限制的线性表
与其他线性表不同的是,数据结构中的队列只能从队尾添加元素,在对头删除元素,这是由它的逻辑结构决定的
2.队列的顺序存储结构—使用顺序表
使用数组保存队列元素
front:头指针
rear:队尾指针
使用顺序表表示队列的缺点:队列已满,无法继续在队尾插入元素,数组仍然有空闲空间,造成了空间的浪费—假溢出。
3.循环队列
循环队列是队列头尾相接的顺序存储结构。
特点:数组未满的时候都可以插入新的队尾元素
处理队满和队空有两种方法
1.少用一个空间元素,即队列空间大小为Maxsize时,有Maxsize-1个元素就认为是队满
2.单独设置一个标识符以便于区别队列是否为空状态。
队列为空:rear==front==0;
队列已满:(rear+1)%Maxsize==front
4.循环队列的实现细节和注意要点
1.要定义队列头部,队列尾部,元素个数,数组长度。
2.定义插入队列的方法:首先要判断队列是否满了,如果没满,就将传入的参数赋值给当前rear指向的array[rear],完成赋值之后,count++,因为这个是循环队列,所以如果rear指向了最后一位,那么就要规定下一个rear就指向了首位,rear=0.
2.定义出队列方法:其中front的处理方法和rear一样。
3.可以通过count定义队列是否为满或者空的方法。
quequ类:
 1 package Queue;
 2 /**
 3 * @类名  Queue.java
 4 * @作者       修仙小华
 5 * @版本  V1.0
 6 * @日期  2019年7月24日-下午2:32:09
 7 * @描述  
 8 */
 9 public class Queue {
10     private int front=0;//队列头部
11     private int rear=0;//队列尾部
12     private int count=0;//元素个数
13     private int MaxSize=5;//数组最大值
14     String array[] =new String[MaxSize];
15     /**
16      * 插入队列
17      */
18     public void push(String data) {
19         if (isFull()!=true) {
20             array[rear]=data;
21             count++;
22             if ((rear)==(MaxSize-1)) {
23                 rear=0;
24             }else {
25                 rear++;
26             }
27         }else {
28             return;
29         }
30     }
31     /**
32      * 出队列
33      */
34     public String  pop() {
35         if (isEmpty()!=true) {
36             this.count--;
37             int temp=front;
38             if ((front)==(MaxSize-1)) {
39                 front=0;
40             }else {
41                 front++;
42             }
43             return array[temp];
44         }else {
45             return null;
46         }
47     }
48     /**
49      * 看看队首数据
50      */
51     public String peek() {
52         return array[front];
53     }
54     /**
55      * 判断队列是否为空,为空返回true
56      */
57     public boolean isEmpty() {
58         if (count==0) {
59             return true;
60         }else {
61             return false;
62         }
63     }
64     /**
65      * 判断队列是否满了
66      */
67     public boolean isFull() {
68         if (count==MaxSize) {
69             return true;
70         }else {
71             return false;
72         }
73     }
74     /**
75      * 队列长度
76      */
77     public int Count() {
78         return this.count;
79     }
80 }

测试类:

 1 public class QueueTest {
 2     public static void main(String[] args) {
 3         Queue qu=new Queue();
 4         qu.push("张三");
 5         qu.push("李四");
 6         qu.push("王二");
 7         qu.push("麻子");
 8         qu.push("袁帅");
 9         System.out.println(qu.Count());
10         System.out.println(qu.isEmpty());
11         System.out.println(qu.peek());
12         qu.pop();
13         qu.pop();
14         qu.pop();
15         qu.pop();
16         qu.push("张三");
17         qu.push("李四");
18         qu.push("王二");
19         qu.push("麻子");
20         qu.pop();
21         System.out.println(qu.Count());
22         System.out.println(qu.peek());
23     }
24 
25 }

 

posted @ 2019-07-30 09:32  修仙小华  阅读(426)  评论(0编辑  收藏  举报