队列

1.队列:

         特点:

    队列是一个有序列表,可以用数组或者是链表来实现

    遵循先进先出的原则

   思路分析:

 

    添加时:

 

      如果rear ==maxsize-1时 表示储存满,不可再添加,如果rear != maxsize-1 则表示队列有空间可添加,将数据存入rear所指的数组元素中

 

       删除时:

 

      如果front==rear时,表示空,不能删除数,否则front后移

 

  思维导图:

    

  代码实现:

 1 class Queue02 {
 2     private int heigth;//指向队列头部,但不包含头部
 3     private int end;//队列尾部包含队列尾部
 4     private int maxSize;//最大存储量
 5     private int[] array;//容器
 6     //初始化数据
 7     public void init(int size) {
 8         heigth = -1;
 9         end = -1;
10         maxSize = size;
11         array = new int[maxSize - 1];
12     }
13     //判断是否为空
14     public Boolean isNull() {
15         return heigth == end;
16     }
17     //判断是否满
18     public Boolean isFull() {
19         return end == maxSize-1;
20     }
21     //添加数据
22     public void add(int sum) {
23         if (!isFull()) {
24             array[++end] = sum;
25         } else {
26             System.out.println("队列已满");
27         }
28     }
29     //删除数据
30     public void dele() {
31         if (!isNull()) {
32             heigth++;
33         } else {
34             System.out.println("为空");
35         }
36     }
37     //查看所有数据
38     public void see() {
39         if (!isNull()) {
40             for (int i = 0; i <= array.length; i++) {
41                 System.out.println("第" + i + "个数据为:" + array[i]);
42             }
43         }
44     }
45     //取出数据
46     public void heigth() {
47         if (!isNull()) {
48             System.out.println("头数据为" + array[heigth+1]);
49         }
50     }
51 }

 

  缺点:

    目前数组使用就不能使用了,没有达到复用的效果

    将这个数组使用算法,改进成一个环形的数组 核心使用取模(%)来实现的

2. 数组模拟环形队列:

  思路分析:

    1. front指向队列的第一个元素,即front==0;
    2. Rear 指向队列的最后一个元素的后一个位置,rear==0
    3. 当队列满时:(rear+1) % maxSize = front;
    4. 当队列空时:front = rear;
    5. 有效数据的个数:(rear + maxSize - front) % maxSize   

        没怎么理解的同学多套用一下数据

  思路图解:

    

    代码实现:

      

class Loop{
    private int heigth;//指向队列头部包含头部
    private int end;//队列尾部后一个数据
    private int maxSize;//最大存储量
    private int[] array;//容器
    //初始化数据
    public void init(int size) {
        maxSize = size;
        array = new int[maxSize];
    }
    //判断是否为空
    public Boolean isNull() {
        return heigth == end;
    }
    //判断是否满
    public Boolean isFull() {
        return (end + 1)%maxSize == heigth;
    }
    //添加数据
    public void add(int sum) {
        if (!isFull()) {
            array[end] = sum;
            end = (end+1)%maxSize;
        } else {
            System.out.println("队列已满");
        }
    }
    //删除数据
    public void dele() {
        if (!isNull()) {
            //先把front            
            int value = array[heigth];
            heigth= (heigth+1)%maxSize;
        } else {
            System.out.println("为空");
        }
    }
    //查看所有数据
    public void see() {
        if (!isNull()) {
            for (int i = heigth; i <= (sizeSum()); i++) {
                System.out.println(array[i%maxSize]);
            }
        }
    }
    //取出数据
    public void heigth() {
        if (!isNull()) {
            System.out.println("头数据为" + array[heigth]);
        }
    }
    public int sizeSum() {
        return (end + maxSize - heigth)%maxSize;
    }
}

 

posted on 2020-04-08 21:40  落子戏  阅读(100)  评论(0编辑  收藏  举报

导航