算法_栈的Java的通用数组实现
栈是一个常用的最简单的数据结构,这里提供了其实现.内部维护了一个数组,并且可以动态的调整数组的大小.而且,提供了迭代器支持后进先出的迭代功能.Stack的实现是所有集合类抽象数据类型实现的模板,它将所有元素保存在数组中,并动态的调整数组的大小,以保持数组大小和栈大小之比小于一个常数.
import java.util.Iterator;
public class ResizingArrayStack<Item> implements Iterable<Item> {
private Item [] a=(Item[])new Object[1];//内部维护了一个数组,存储数据.
private int N; //元素数量.
public ResizingArrayStack() {}
public boolean isEmpty() {
return N==0;
}
public int size() {
return N;
}
public void push(Item item) {
if(N==a.length) resize(2*a.length); //如果不断压入,自由的变更大小
a[N++]=item;
}
public Item pop() {
Item str=a[--N];
a[N]=null;
if(N<a.length/4) resize(a.length/2);//如果不断弹出,保证内存的利用率
return str;
}
public void resize(int n) {
//将数组引用指向一个更大的数组
Item[] items=(Item[])new Object[n];
for(int i=0;i<a.length;i++) {
items[i]=a[i];
}
a=items;
}
@Override
public Iterator<Item> iterator() {
return new ReverseArrayIterator();
}
private class ReverseArrayIterator implements Iterator<Item> {
//支持后进先出的迭代.
int i=N;
@Override
public boolean hasNext() {
return i>0;
}
@Override
public Item next() {
return a[--i];
}
}
}
算法_栈的Java的通用数组实现的更多相关文章
- 算法_队列的Java通用数组实现
在实现Queue的API的时候,可以使用两个实例变量做索引,一个变量head指向队列的开头,另一个变量tail指向队列的结尾.在删除一个元素的时候,使用head访问,并将head+1,插入一个元素的时 ...
- 算法_栈与队列的Java链表实现
链表是一个递归的数据结构,它或者为null,或者是指向一个结点的引用,该结点含有一个泛型的元素和指向另一个链表的引用.可以用一个内部类来定义节点的抽象数据类型: private class Node ...
- javasript_数据结构和算法_栈
//-----------------------------------存储结构为数组-------------------------------------------- function St ...
- 【老鸟学算法】包含 min函数的栈设计——java实现
要求: 1. 定义栈的数据结构,要求添加一个 min函数,能够得到栈的最小元素. 2. 要求函数 min.push 以及 pop 的时间复杂度都是 O(1). 这是考验“栈”数据结构设计.众所周知,栈 ...
- “全栈2019”Java第三十一章:二维数组和多维数组详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第三十章:数组详解(下篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十九章:数组详解(中篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十八章:数组详解(上篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解
数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...
随机推荐
- [C++][代码库]Vector3空间向量类
本文用C++实现一个简单的Vector3类的功能,暂时有的功能是: 1 + - * /算术运算 2 向量的数量积,又叫:点乘 3 向量的向量积,又叫:叉乘 4 向量单位化(normalization) ...
- cookie与localstorage和sessionstorage的区别比较
保存位置: 三者均保存在浏览器端,且同源的. 与服务器的关系: cookie 数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递. sessionStorage ...
- 2015-11-04 asp.net 弹出式日历控件 选择日期 Calendar控件
html代码: <%@ Page Language="C#" CodeFile="calendar.aspx.cs" Inherits="cal ...
- git: fatal unable to auto-detect email address
参考:http://stackoverflow.com/questions/25671785/git-fatal-unable-to-auto-detect-email-address 正确使用命令: ...
- #在lua中的运用
在lua中"#"表示返回表长度或字符串长度 例子一: a = "Hello " b = "World" print("Concat ...
- ListView Animation
简单介绍一下4种动画效果方式AnimationSet set = new AnimationSet(false); Animation animation = new AlphaAnimation(0 ...
- WPFの布局中Panel的选用
一.Canvas 这个容器能够对元素做准确的定位,但同时也是其创建的页面不够灵活. 二.StackPanel 最大的优点是:他会顺序的对他的子元素进行排列显示.(没有任何附加属性) 要注意的是:他有两 ...
- Mysql-学习笔记(==》约束 六)
-- 建立表的相关约束主键约束 PRIMARY KEY (主键自带索引 PK 关系数据库领域,要求一个表只有一个主键)CREATE TABLE t1( tid INT UNSIGNED NOT NUL ...
- Json 入门例子 多行数组 【1】
处理以上数据 <script type="text/javascript"> $(function () { $("#fm").click(func ...
- PHP 对字符串进行十六进制替换 invalid character in attribute value
最近在xml传输过程中遇到字符串报错,表面看上去没有任何错误.将文件用winhex打开,看到对应字符串中多了'1F'.xml无法解析'1F'.随后在代码中将这个替换掉. $str = pack(&qu ...