zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    JavaScript的for循环编写九九乘法表
    Python核心编程(切片索引的更多内容)
    js/jq宽高的理解与运用
    七月与安生:不管选择哪条路,都会是辛苦的 — —豆瓣老丑
    Linux命令入门
    jq滚动监听-导航滚动
    jQuery页面滚动监听事件及高级效果插件
    跟随鼠标移动展示内容
    用相对定位和负向移动完成图片相框阴影
    腾讯数据总监:运营人员必须掌握的APP基础数据分析体系(没有比这篇更系统全面的)
  • 原文地址:https://www.cnblogs.com/had1314/p/11268038.html
Copyright © 2011-2022 走看看