算法_队列的Java通用数组实现
在实现Queue的API的时候,可以使用两个实例变量做索引,一个变量head指向队列的开头,另一个变量tail指向队列的结尾.在删除一个元素的时候,使用head访问,并将head+1,插入一个元素的时候,使用tail保存它,并将tail加1.如果某个索引增加到超过了数组的边界的时候,则将它重置为0.下面是队列的数组实现,除了对于头元素和尾元素的基本操作以外,其余基本和堆栈相同.
import java.util.Iterator; //编写一个类ResizingArrayQueueOfStrings使用定长数组实现队列的抽象,
//然后扩展实现,使用调整数组的方法突破数组大小的限制
public class ResizingArrayQueueOfStrings<Item> implements Iterable<Item> {
private Item[] a=(Item[])new Object[1];
int head=0; //指向队列的开头的索引
int tail=0; //指向队列的结尾的索引
int N; //数组中装填的元素数量 public boolean isEmpty() {
return N==0;
}
public int size() {
return N;
}
public void add(Item item) {
if(N==a.length) resize(a.length*2);//N增加至数组容量的时候,动态扩展数组的大小
a[tail++]=item; //从tail(尾部)索引处获取元素.
if(tail==a.length) tail=0; //如果tail索引增加到了数组的长度,那么重新置0
N++; //增加N.
}
public Item remove() {
Item item=a[head]; //从队列头移除元素
a[head++]=null; //将队列头的元素设为null,避免对象游离
N--; //将N减一
if(head==a.length) head=0; //如果head索引增加到了数组的长度,重新置0
if(N<a.length/4) resize(a.length/2);
return item; //返回队列头部的元素.
}
public void resize(int n) /*动态调整数组大小的方法*/{
//将数组引用指向一个更大的数组
Item[] items=(Item[])new Object[n];
for(int i=0;i<N;i++) {
items[i]=a[(i+head)%a.length]; //从头元素开始赋值给新的元素.
}
a=items;
//将头元素和尾部元素分别置位.
head=0;
tail=N;
}
@Override
public Iterator<Item> iterator() {
return new QueueIterator();
}
class QueueIterator implements Iterator<Item> {
int i=0;
@Override
public boolean hasNext() {
return i<N;
} @Override
public Item next() {
Item item=a[(i+head)%a.length]; //从头元素开始获取元素.
i++;
return item;
} }
}
算法_队列的Java通用数组实现的更多相关文章
- 算法_栈的Java的通用数组实现
栈是一个常用的最简单的数据结构,这里提供了其实现.内部维护了一个数组,并且可以动态的调整数组的大小.而且,提供了迭代器支持后进先出的迭代功能.Stack的实现是所有集合类抽象数据类型实现的模板,它将所 ...
- Java使用反射的通用数组复制方法
Java通用数组复制方法 在Arrays工具类中,提供了一个copyOf(T[] original, int newLength)方法,用于复制任意类型的对象数组,但是由于泛型不能作用于基本类型,所以 ...
- 算法_栈与队列的Java链表实现
链表是一个递归的数据结构,它或者为null,或者是指向一个结点的引用,该结点含有一个泛型的元素和指向另一个链表的引用.可以用一个内部类来定义节点的抽象数据类型: private class Node ...
- Java的数组,集合,数据结构,算法(一)
本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这 ...
- php与java通用AES加密解密算法
AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的 ...
- Java中数组的几个常用算法:插入算法,删除算法,冒泡排序算法
前言: 在Java中我们常常会用数组,提到数组就不得不介绍数组中常用到的几个算法. 有插入算法,删除算法,冒泡排序算法等. 在学习这几个数组的算法前,我们先来了解一下关于数组一些基本知识. 数组的基本 ...
- JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)
前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...
- 三 基于Java动态数组手写队列
手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...
- Java实现 蓝桥杯 算法提高 队列操作
算法提高 队列操作 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输入格式 ...
随机推荐
- window下appserv组合包配置asp标记风格与简短风格
php一共有四种编码风格 分别为 :XML风格,脚本分铬,简短风格,ASP风格 如果要配置asp标记风格与简短风格,需要在php.ini文件中配置. 打开文件的位置C:\ window\php.ini ...
- 【转】MYSQL入门学习之三:全文本搜索
转载地址:http://www.2cto.com/database/201212/173873.html 一.理解全文本搜索 www.2cto.com 1.MyISAM支持全文本搜索,而Inn ...
- app framework map及ajax方法
$(function () { $.ajax({ url: 'Ashx/GetProductList.ashx', contentType: "JSON", success: fu ...
- jquery 判断checkbox是否为空的三种方法
//方法一: if ($("#checkbox-id")get(0).checked) { // do something } //方法二:也适用于单选按钮 if($('#chec ...
- asp.net 查询,导出
using System;using System.Configuration;using System.Data;using System.Linq;using System.Web;using S ...
- 分页sql
/// <summary> /// 根据页数分页 /// </summary> /// <param name="page"></para ...
- C#中的字符串处理——找出最长数字子串
百度测试部2015年10月份的面试题之——字符串处理,找出最长的子串. 代码如下: private static string SelectNumberFromString(string input) ...
- MUI 个推
个推 四种消息模板(透传消息模板.点击通知打开网页模板.点击通知打开应用模板.点击通知栏弹框下载模版) 三种推送方式(对单个用户推送接口 | 对指定用户列表推送接口 | 对指定应用群推接口) 四种消息 ...
- c#存储过程
1. 只返回单一记录集的存储过程 SqlConnection sqlconn = new SqlConnection(conn); SqlCommand cmd = new SqlCo ...
- 使用Hibernate框架,新增数据后如何返回新增数据的全部信息
一.需求描述:一个修改事物(TRANSACTION)先后包括子事物修改和子事物新增,修改事物完成后返回其子事物新增的全部数据 二.实现:若实现修改对象后还需要新增一个新对象,并返回新对象的需求,保存 ...