java中单向队列,java算法-单向队列

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

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

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

所以:

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

>删除元素时,当头部到达数组末尾的时候,我们就把头部重置,即指向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算法--普通队列

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

java算法--循环队列

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

Java数据结构和算法&lpar;二&rpar;--队列

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

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

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

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

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

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

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

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

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

java算法--稀疏数组

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

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

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

随机推荐

利用pg&lowbar;stat&lowbar;activity进行问题排查

pg_stat_activity是一个非常有用的视图,可以帮助排查pg的一些问题(如连接数目过多问题).pg_stat_activity每行展示的是一个“process”的相关信息,这里的“proce ...

js 基础

js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避 ...

hdu 3530 Subsequence

题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3530 Subsequence Description There is a sequence of i ...

hdoj 4324 Triangle LOVE 【拓扑】

Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

统计学习方法:核函数(Kernel function)

作者:桂. 时间:2017-04-26  12:17:42 链接:http://www.cnblogs.com/xingshansi/p/6767980.html 前言 之前分析的感知机.主成分分析( ...

RxSwift 系列&lpar;一&rpar; -- Observables

为什么使用RxSwift? 我们编写的代码绝大多数都涉及对外部事件的响应.当用户点击操作时,我们需要编写一个@IBAction事件来响应.我们需要观察通知,以检测键盘何时改变位置.当网络请求响应数据时 ...

结合API Gateway和Lambda实现登录时的重定向和表单提交请求(Python3实现)

1. 创建Lambda函数,代码如下: from urllib import parse def lambda_handler(event, context): body = event['body' ...

Nginx Java 日志切割脚本

Nginx日志切割脚本: #!/bin/bash ########################################################################### ...

mac shell终端编辑命令行快捷键

Ctrl + d        删除一个字符,相当于通常的Delete键(命令行若无所有字符,则相当于exit:处理多行标准输入时也表示eof) Ctrl + h        退格删除一个字符,相当 ...

ASP&period;NET MVC 使用NPOI导出Excel 无法访问已关闭的流&lpar;转&rpar;

第一步重写MemoryStream , 让它不能自动关闭. //新建类 重写Npoi流方法 public class NpoiMemoryStream : MemoryStream { public ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值