zoukankan      html  css  js  c++  java
  • <数据结构-队列>

      今天我们学习数据结构中的队列

    1,什么是队列呢

      就是数据成队的排列着,像你去火车站买票,你的排队吧,轮到你了才能买票,你排这个队就叫着队列。

    2,队列的作用

      有效,有次序的管理数据,先排队的先买票,后来排队的后买票(FIFO).--------先进先出

    3,队列特性

      a,本质就是数组。

      b,后来的元素,只能放在当前队列最后一个元素的后面,如果队列满了,将不能在向队列中添加元素

      c,每次取出数据都是,取队列的第一个元素。

    3,队列分类

      a,普通队列:1,就是你去买票排队,买到票的人,退出这个队列,后面这个人向前走一个,再后依次向前走。(缺点:数据大量的移动,造成不必要的cpu消耗,影响程序执行效率)

              2,队列不变,卖票的人卖给第一位后,走向第二位,然后依次走向最后一位。(缺点:执行过的数据,任然在队列和内存中,只能靠扩展队列长度来容纳更多元素,造成大量空间浪费)

      b,环形队列:利用普通队列1和2结合,有效的解决了以队列的缺点,队列构成了一个圆环,当添加元素到队列时,向后排;当取出队列时也向后移动,当添加元素到队列的最末端时,将又从队列头开始添加数据。。。。 

    4,代码实现环形队列

     1 //环形队列设计
     2 class Queue{
     3     int qHead;//头指针
     4     int qEnd;//尾指针
     5     int qSumSize;//队列总容量
     6     int qCurSize;//队列中当前有多少个元素
     7     int q[];//用于装队列元素的数组
     8     
     9     //初始化一个队列
    10     public void createQ(int qSumSize){
    11         this.qHead = 0;
    12         this.qEnd = 0;
    13         this.qSumSize = qSumSize;
    14         q = new int[qSumSize];
    15     }
    16     //清楚队列中元素
    17     public void delQ(){
    18         this.qHead = 0;
    19         this.qEnd = 0;
    20         q = null;
    21     }
    22     //获得队列总容量
    23     public int getQsize(){
    24         return this.qSumSize;
    25     }
    26     //获得队列有多少个元素
    27     public int getCurQsize(){
    28         return this.qCurSize;
    29     }
    30     //判断队列是否为空
    31     public boolean isEmpty(){
    32         return qCurSize==0?true:false;
    33     }
    34     //判断队列是否装满
    35     public boolean isFull(){
    36         return qCurSize==qSumSize?true:false;
    37     }
    38     //添加一个元素到队列
    39     public boolean add(int num){
    40         if(isFull()){
    41             return false;
    42         }else{
    43             q[qEnd] = num;
    44             qEnd++;
    45             qEnd = qEnd%qSumSize;
    46             qCurSize++;
    47             return true;
    48         }
    49     }
    50     //获取队列头元素
    51     public int get(){
    52         int num = 0;
    53         if(isEmpty()){
    54             System.out.println("--队列为空00");
    55             return num;
    56         }else{
    57             num = q[qHead];
    58             qHead++;
    59             qHead = qHead%qSumSize;
    60             qCurSize--;
    61             return num;
    62         }
    63     }    
    64     //遍历队列中所有元素
    65     public void select(){
    66         for(int i=qHead;i<qCurSize+qHead;i++){
    67             System.out.print(q[i%qSumSize]+",");
    68         }
    69         System.out.println();
    70     }
    71 }

    测试队列:

    public class YQueue {
         public static void main(String[] args) {
            final Queue q = new Queue(); //实例化一个队列对象
             q.createQ(5);//初始化队列的总容量为5
             new Thread(new Runnable() {
                @Override
                public void run() {
                        for(int i=0;i<9;i++){
                            System.out.println("添加第"+(i+1)+"个元素:"+(q.add(new Random().nextInt(10)+1)==true?"成功":"失败"));
                            //当向队列中插入第6个元素时,队列满了,就应该不能插入所以,那么我们就取出一个元素,再插入
                            if(i==6){
                                System.out.println("获得元素:"+q.get());
                            }
                            q.select();
                         }
                }
            }).start();
        }
    }

    测试结果:

  • 相关阅读:
    记录一次有意思的XSS过滤绕过2
    2018年总结
    记录一次Oracle注入绕waf
    记录一次有意思的XSS过滤绕过
    绕过阿里云waf进行SQL注入
    CRLF在过滤XSS语句后打Cookie方式
    JavaWeb之商品查看后历史记录代码实现
    Mysql注入小tips --持续更新中
    JDK动态代理(Proxy)的两种实现方式
    ajax 异步刷新
  • 原文地址:https://www.cnblogs.com/sanhuan/p/7346748.html
Copyright © 2011-2022 走看看