队列-java代码

public class QueueDemo {

    private int maxSize;
    private long[] queueArray;
    // 队列的头,实际是数组的尾
    private int header;
    // 队列的尾,实际是数组的头
    private int footer;
    private int nElems;

    public QueueDemo(int size){

        maxSize = size;
        queueArray = new long[maxSize];
        header = 0;
        footer = -1;
        nElems = 0;
    }
    // 插入队列,从队尾插入
    public void insert(long element){

        if(footer == (maxSize - 1)){
            footer = -1;
        }
        queueArray[++footer] = element;
        nElems++;
    }
    // 出队列,即取出数组尾
    public long remove(){

        long temp = queueArray[header];
        queueArray[header] = 0;
        if(++header == maxSize){
            header = 0;
        }
        nElems--;
        return temp;
    }
    // 取出队列头元素
    public long getHeader(){

        return queueArray[header];
    }
    // 取出队列数组
    public long[] getArray(){

        return queueArray;
    }
}

队列是先进先出,可以想象成火车进隧道

优先级队列:

import java.util.Arrays;

/**
 * 优先级数组
 *
 * @author Orlion
 * @create 2015-09-12
 */
public class PriorityQDemo {

    private int maxSize;
    private long[] priorityqArray;
    private int header;
    private int footer;

    public PriorityQDemo(int size){

        maxSize = size;
        priorityqArray = new long[maxSize];
        header = 0;
        footer = -1;
    }
    // 插入优先级数组
    public void insert(long element){

        int i = footer;
        while(i > 0 && priorityqArray[i] > element){
            priorityqArray[i + 1] = priorityqArray[i];
            i--;
        }
        priorityqArray[i+1] = element;
        footer++;
    }
    // 出队列
    public long remove(){

        long temp = priorityqArray[header];
        priorityqArray[header] = 0;
        if(++header == maxSize){
            header = 0;
        }
        return temp;
    }
    // 打印队列
    public void getPriorityq(){
        System.out.print(Arrays.toString(priorityqArray));
    }
}

可以理解成有一定顺序的队列,也是先进先出

时间: 2024-10-11 22:45:46

队列-java代码的相关文章

数据结构之链表、栈和队列 java代码实现

定义抽象节点类Node: 1 package cn.wzbrilliant.datastructure; 2 3 /** 4 * 节点 5 * @author ice 6 * 7 */ 8 public abstract class Node { 9 private Node next; 10 11 public Node(){ 12 next=null; 13 } 14 15 public void setNext(Node nextNode){ 16 next=nextNode; 17 }

java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码

代码下载地址:http://www.zuidaima.com/share/1838230785625088.htm 原文:java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码 最近由于zuidaima.com注册用户的增多,qq企业邮箱发送邮件会被封禁账号导致注册后面的用户收不到周总结,所以紧急开发了一套多账号,多服务器发送邮件的程序. 大概的设计思路如下: 1.服务器可以无限扩展,但由于qq企业邮箱是限定域名,所以要想多服务器还得有多域名,多账号也不行. 2.最

java中使用队列:java.util.Queue (转)

Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Queue接 口.Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用.BlockingQueue 继承了Queue接口. 队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就

kafka中常用API的简单JAVA代码

通过之前<kafka分布式消息队列介绍以及集群安装>的介绍,对kafka有了初步的了解.本文主要讲述java代码中常用的操作. 准备:增加kafka依赖 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.10.2.0</version> </dependenc

自学总结redis第二部分(redis常用命令、高级命令特性以及与java代码的结合)

六.redis多数据类型介绍(常用命令) 6.1前提操作 #如果前面的redis环境没搭好,那么可以先暂时在 "http://try.redis.io/"中实践redis命令部分.   #为了测试方便,把redis登录密码暂时撤销   #redis一共分为五种基本数据类型:String,Hash,List,Set,ZSet #所有命令都可以到"http://www.redis.cn/commands.html"  去搜索到. #首先由于redis是一个基于key-v

java代码面试常见的算法-mark

摘要:面试也是一门学问,在面试之前做好充分的准备则是成功的必须条件,而程序员在代码面试时,常会遇到编写算法的相关问题,比如排序.二叉树遍历等等. 在程序员的职业生涯中,算法亦算是一门基础课程,尤其是在面试的时候,很多公司都会让程序员编写一些算法实例,例如快速排序.二叉树查找等等. 本文总结了程序员在代码面试中最常遇到的10大算法类型,想要真正了解这些算法的原理,还需程序员们花些功夫. 1.String/Array/Matrix 在Java中,String是一个包含char数组和其它字段.方法的类

Spring学习笔记1——IOC: 尽量使用注解以及java代码(转)

在实战中学习Spring,本系列的最终目的是完成一个实现用户注册登录功能的项目. 预想的基本流程如下: 1.用户网站注册,填写用户名.密码.email.手机号信息,后台存入数据库后返回ok.(学习IOC,mybatis,SpringMVC的基础知识,表单数据验证,文件上传等) 2.服务器异步发送邮件给注册用户.(学习消息队列) 3.用户登录.(学习缓存.Spring Security) 4.其他. 边学习边总结,不定时更新.项目环境为Intellij + Spring4. 一.准备工作. 1.m

Spring学习笔记1——IOC: 尽量使用注解以及java代码

在实战中学习Spring,本系列的最终目的是完成一个实现用户注册登录功能的项目. 预想的基本流程如下: 1.用户网站注册,填写用户名.密码.email.手机号信息,后台存入数据库后返回ok.(学习IOC,mybatis,SpringMVC的基础知识,表单数据验证,文件上传等) 2.服务器异步发送邮件给注册用户.(学习消息队列) 3.用户登录.(学习缓存.Spring Security) 4.其他. 边学习边总结,不定时更新.项目环境为Intellij + Spring4. 一.准备工作. 1.m

目瞪口呆的 Java 代码技巧你都见过哪几种?

前言: 感谢大家观看本文,希望大家都能有所收获 导语: 从踏入社会以来本人就一直在做 Java 相关的工作,现在终于有时间坐下来,写一篇关于 Java 写法的一篇文章,来探讨一下如果你真的是一个 Java 程序员,那你真的会写 Java 吗? 笔者是一个务实的程序员,故本文绝非扯淡文章,文中内容都是干货,望读者看后,能有所收获. 本文不是一个吹嘘的文章,不会讲很多高深的架构,相反,会讲解很多基础的问题和写法问题,如果读者自认为基础问题和写法问题都是不是问题,那请忽略这篇文章,节省出时间去做一些有