• 队列


    队列是一种特殊的线性结构,它只允许在队列的首部(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] + "	");
    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 }

    执行结果:

    欢迎批评指正,提出问题,谢谢!
  • 相关阅读:
    nyoj 17 单调递增最长子序列
    nyoj 18 The Triangle
    nyoj 712 探 寻 宝 藏
    nyoj 61传纸条(一)
    nyoj 269 VF
    nyoj 44 子串和
    nyoj 252 01串
    nyoj 42 一笔画问题
    nyoj 756 重建二叉树
    Table 样式设置
  • 原文地址:https://www.cnblogs.com/xxeleanor/p/14449852.html
Copyright © 2020-2023  润新知