zoukankan      html  css  js  c++  java
  • 数据存储--队列

    队列:

      类似于生活中的排队购票系统,排头的人总是最先到的,也是最先取到票的。即先入先出(FIFO),跟栈的后入先出(LIFO)是不同的。

      误区:算法里的队列并不会像生活剧中一样,排头走后,后面的跟着前移一步,队列是一种存放数据的工具,从底部开始存数据,存放一个到排尾,数据的访问权就上移一位,取出排头的一个,数据的访问权也上移一位。

      某一时刻的队列图如下:

     

     此时的队列,只能存入两个数据,但还有三个空的单元。

           更加实用的队列设计是环绕式处理。当添加数据到队列顶端时,先判断队列是否为空,然后将队尾指针循环到队列底端。

    java实现:

     1 package com.test;
     2 
     3 public class Test {
     4 
     5     public static void main(String[] args) {
     6         
     7         queue q = new queue(4);
     8         q.insert(1);
     9         q.insert(2);
    10         q.insert(3);
    11         
    12         long f = q.peekFront();
    13         System.out.println("队头元素:"+f);
    14         
    15         q.remove();
    16         
    17         long f2 = q.peekFront();
    18         System.out.println("队头元素:"+f2);
    19 
    20 
    21     }
    22 }
    23 
    24 /**
    25  * 队列
    26  * @author jingxin
    27  *
    28  */
    29 class queue{
    30     private int maxSize;  // 队列大小
    31     private long[] queArray; // 基于数组
    32     private int front;  // 队头
    33     private int rear;  // 队尾
    34     private int nEelms; // 数组元素下标
    35     
    36     public queue(int s){
    37         maxSize = s;
    38         queArray = new long[maxSize];
    39         front = 0;
    40         rear = -1;
    41         nEelms = 0;
    42     }
    43     
    44     // 添加元素
    45     public void insert(long i){
    46         // 队尾已到顶了
    47         if(rear==maxSize-1){
    48             rear = -1;  // 队尾指针环绕到最低端
    49         }
    50         queArray[++rear] = i; // 指针先上移
    51         nEelms++;  // 元素个数加1
    52     }
    53     
    54     // 移除元素(移除队头元素,当然也可以设计移除队尾元素)
    55     public long remove(){
    56         if(nEelms!=0){
    57             long temp = queArray[front++];  // 移除后指针上移
    58             if(front==maxSize){
    59                 front = 0;
    60             }
    61             nEelms--;
    62             return temp;  
    63         }else{
    64             return -1;
    65         }
    66         
    67     }
    68     
    69     // 查看队头
    70     public long peekFront(){
    71         return queArray[front];
    72     }
    73     
    74     public boolean isEmpty(){
    75         return nEelms==0;
    76     }
    77     
    78     public boolean isFull(){
    79         return nEelms == maxSize;
    80     }
    81     
    82     public int size(){
    83         return nEelms;
    84     }
    85 }
  • 相关阅读:
    【原创】Java与数据结构(上篇:排序算法)
    【九度OJ】题目1084:整数拆分
    kaixin001接入
    Facebook接入(下)
    svn手册摘录
    Facebook接入(上)
    使用mysqldb从数据库中导出xml
    使用cmd模块,让脚本更舒服些
    django 的简单测试
    python字符串替换
  • 原文地址:https://www.cnblogs.com/x-jingxin/p/6836913.html
Copyright © 2011-2022 走看看