队列是一种:先进先出,后进后出的数据结构

单项队列: 从前面删除元素,从后面插入元素,跟现实中排队是一样的道理

这里我们用指针移动位置的方法。因为数组删除元素,如果我们要跟现实中排队效果一样,就需要移动数组,很浪费时间和空间。

所以:

>添加元素时,当尾部到达数组末尾的时候,我们就把他指向头部

>删除元素时,当头部到达数组末尾的时候,我们就把头部重置,即指向0

package com.ghostwu;

class Queue {

    private Object[] queueArr;
private int maxSize; //总大小
private int front; //头
private int rear; //尾
private int realNums; //队列真实长度 public Queue( int _n ){
maxSize = _n;
queueArr = new Object[maxSize];
front = 0;
rear = -1;
realNums = 0;
} public void append( int value ){
if( isFull() ){
System.out.println( "队列满了" );
}else {
if( rear == maxSize - 1 ){ //尾部满了,把指针指到头部
rear = -1;
}
queueArr[++rear] = value;
realNums++;
}
} public Object shift(){
Object value = null;
if( !isEmpty() ){
value = peekFront();
queueArr[front] = null;
front++;
if( front == maxSize ){
front = 0;
}
realNums--;
}
return value;
} public Object peekFront(){
return queueArr[front];
} public boolean isFull(){
return realNums == maxSize;
} public boolean isEmpty(){
return realNums == 0;
} public int getSize(){
return realNums;
} public void print(){
for( int i = 0; i < queueArr.length; i++ ){
System.out.print( queueArr[i] + "\t" );
}
}
} public class MyQueue { public static void main(String[] args) { Queue q = new Queue( 5 );
q.append( 10 );
q.append( 20 );
q.append( 30 );
q.append( 40 );
q.append( 50 ); System.out.println( q.peekFront() );
System.out.println( q.getSize() );
q.shift();
System.out.println( q.peekFront() );
q.print();
q.append( 100 );
q.append( 200 );
} }

java算法-单向队列的更多相关文章

  1. java算法--普通队列

    数据结构队列 首先明确一下队列的概念. 队列是一种有序列表,使用数组的结构来存储队列的数据. 队列是一种先进先出的算法.由前端加入,由后端输出. 如下图: ​ 第一个图 第二个图 第三个图 这就是队列 ...

  2. java算法--循环队列

    循环队列 我们再用队列得时候不知道发没发现这样一个问题. 这是一个只有三个位置得队列,在进行三次加入(addqueue)操作和三次取出(get)操作之后再进行加入操作时候的样子.明显可以看到,队列已经 ...

  3. Java数据结构和算法(二)--队列

    上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...

  4. Java实现 蓝桥杯 算法提高 队列操作

    算法提高 队列操作 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输入格式 ...

  5. Java多线程 阻塞队列和并发集合

    转载:大关的博客 Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容.在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃.Java为多线程专门提供了特有的 ...

  6. java-Enumeration,单向队列Queue及双向队列Deque等容器简单使用

    1.Enumeration容器使用: package com.etc; import java.util.Enumeration; import java.util.Vector; /* Enumer ...

  7. 【java多线程】队列系统之说说队列Queue

    转载:http://benjaminwhx.com/2018/05/05/%E8%AF%B4%E8%AF%B4%E9%98%9F%E5%88%97Queue/ 1.简介 Queue(队列):一种特殊的 ...

  8. java算法--稀疏数组

    数据结构必要知识 线性结构 线性结构是最常用的数据结构,数据元素之间存在一对一的线性关系. 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺序表,顺序表中的存储元素是 ...

  9. Java集合--阻塞队列及各种实现的解析

    阻塞队列(Blocking Queue) 一.队列的定义 说的阻塞队列,就先了解下什么是队列,队列也是一种特殊的线性表结构,在线性表的基础上加了一条限制:那就是一端入队列,一端出队列,且需要遵循FIF ...

随机推荐

  1. Go语言结构

    目录 结构体定义 创建结构体实例 普通方式创建结构体实例 new()创建结构体实例 结构体实例初始化 结构体类型实例和指向它的指针内存布局 结构体的方法 面向对象 组合(继承) 结构体使用注意事项 G ...

  2. 微信小程序的概要

    微信小程序的概要 学习小程序要了解一下什么事小程序,小程序开发前需要做哪些准备,微信小程序开发工具的使用,小程序中的目录结构解析,视图和渲染,事件. 小程序的配置详解,小程序的生命周期与app对象的使 ...

  3. Ubuntu下安装和使用开源的tts软件Flite

    Flite是什么? Flite是一个小型.快速的TTS系统,是festival的C版本,可用于嵌入式系统,支持WinCE.Palm OS 等. 下载方法: wget http://www.festvo ...

  4. vue脚手架中使用axios

    虽然之前用过n次,但大多都是直接在页面中引入axios.js的.今天想换种方式使用,一时间竟不知道怎么配置了.特此记录下. 1.npm 安装axios,文件根目录下安装,指令如下:  npm inst ...

  5. 为什么推荐前端使用Vue.js

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  6. 在 .NET Core 下的 Swagger UI 自定义操作

    1.Swagger UI 是什么? Swagger UI 是一个在线的 API 文档生成与测试工具,你可以将其集成在你的 API 项目当中. 支持 API 自动同步生成文档 高度自定义,可以自己扩展功 ...

  7. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...

  8. Android自动化测试之MonkeyRunner使用

    MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Python的程序来模拟操作控制A ...

  9. leetcode — minimum-path-sum

    /** * Source : https://oj.leetcode.com/problems/minimum-path-sum/ * * * Given a m x n grid filled wi ...

  10. leetcode — jump-game-ii

    /** * // Source : https://oj.leetcode.com/problems/jump-game-ii/ * * Created by lverpeng on 2017/7/1 ...