package practice;

 import java.util.Iterator;
//栈
public class MyStack<T> implements Iterable<T> {
private T[] a;
private int p = 0;
@SuppressWarnings("unchecked")
public MyStack() {
a = (T[]) new Object[1];
} public void push(T elements) {
if (a.length == p) {resize(2*a.length);}
a[p++] = elements;
} public T pop() {
if (a.length/4 == p) {resize(a.length/2);}
return a[--p];
} @SuppressWarnings("unchecked")
public void resize(int length) {
T[] b = (T[]) new Object[length]; //将数组长度改变
for (int i = 0; i < p; i++) { //将数组复制
b[i] = a[i];
}
a = b; //让a指向b的内存空间
} public boolean isEmpty() {
return p == 0;
} public int size() {
return p;
}
@Override
public Iterator<T> iterator() { //使数据结构可以让foreach访问
return new ArrayIterator();
}
private class ArrayIterator implements Iterator<T>{ private int p2 = 0; @Override
public boolean hasNext() { //return false 则foreach终止
return p2 != p;
} @Override
public T next() { //foreach 寻找下一个元素
return a[p2++];
}
}
}

栈的实现Java的更多相关文章

  1. Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)

    --reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...

  2. 栈的实现(JAVA)

    栈定义 栈(stack):是一种特殊的串行形式的数据结构,其特殊之处在于只允许在链接串行或者阵列的 一端进行插入.删除操作.其实现方式可以通过一维阵列和链接串行来实现. Tips:简单的来说栈其实也是 ...

  3. 剑指offer【05】- 用两个栈实现队列(java)

    题目:用两个栈实现队列 考点:栈和队列 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:每次psuh是时先将stack2清空放入stck1(保 ...

  4. 栈的实现——java

    和C++一样,JDK包中也提供了"栈"的实现,它就是集合框架中的Stack类.关于Stack类的原理,在"Java 集合系列07之 Stack详细介绍(源码解析)和使用示 ...

  5. 数组、栈、堆(java基础知识五)

    1.数组概述.定义格式 * A:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引用数据类型. * B:数组定义格式 格式1:数据类型[ ...

  6. java虚拟机栈(关于java虚拟机内存的那些事)

    <深入理解 java 虚拟机> 读书扩展 作者:淮左白衣 写于 2018年4月13日16:26:51 目录 文章目录 java虚拟机栈是什么 特点 栈帧 局部变量表 什么时候抛出 `Sta ...

  7. 05.用两个栈实现队列 Java

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 进栈: 直接进stack1 出栈: 若stack2不为空,则出栈. 否则,当stack1不为空时, ...

  8. (超详细)动手编写 — 栈、队列 ( Java实现 )

    目录 前言 栈 概念 栈的设计 编码实现 小结 队列 概念 队列的设计 编码实现 双端队列 概念 设计 编码 循环队列 循环队列 循环双端队列 声明 前言 栈 概念 什么是栈? **栈 **:是一种特 ...

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

    定义抽象节点类Node: package cn.wzbrilliant.datastructure; /** * 节点 * @author ice * */ public abstract class ...

随机推荐

  1. tomcat的常用配置方法

    1.tomcat配置某个站点的欢迎页面的方法 2.tomcat配置虚拟目录的方法 3.tomcat配置虚拟主机的方法

  2. Redux源码分析之createStore

    接着前面的,我们继续,打开createStore.js, 直接看最后, createStore返回的就是一个带着5个方法的对象. return { dispatch, subscribe, getSt ...

  3. iOS源码博文集锦1

    iOS精选源码 iOS一种弹出视图效果带动画 导航栏显示渐变色,类似qq一样 一分钟找到重力方向 简单高度自定义的日历.可根据项目的需求灵活修改布局 类似于UITableView且极简的图片浏览器 小 ...

  4. Python数据网络采集5--处理Javascript和重定向

    Python数据网络采集5--处理Javascript和重定向 到目前为止,我们和网站服务器通信的唯一方式,就是发出HTTP请求获取页面.有些网页,我们不需要单独请求,就可以和网络服务器交互(收发信息 ...

  5. TCP/IP 主机路由表获取

    介绍在IP协议中主机的路由表获取方法: 主机初始化路由表: 直接相连路由:接口初始化时,自动获取直连主机和网络的路由信息 间接相连路由:通过执行route命令,手动初始化路由表 ICMP路由请求和通告 ...

  6. javascript 用Activex方法调用数据库中的数据,只可用于IE

    // JavaScript source code //创建数据库连接对象 var conn = new ActiveXObject("ADODB.Connection"); // ...

  7. HDU-2017-字符串统计

    /* Name: HDU-2017-字符串统计 Date: 18/04/17 20:19 Description: 水过 */ #include<bits/stdc++.h> using ...

  8. 安徽省2016“京胜杯”程序设计大赛_G_木条染色

    木条染色 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 134 Accepted: 20 Description    小 ...

  9. 对于JavaScript中this关键字的理解

    这是我第二遍学this了,第一遍学的懵懵的.this指哪里都是凭我一个男人的直觉然后控制台输出看看对不对. 刚查了书.博客.视频.理解差不多了.毕竟菜鸡me: 一.首先介绍下什么是this this是 ...

  10. HTML+CSS+JS简介

    1.HTML与 CSS 1 1.1 HTML 1 1.2 HTML5 2 1.2.1 HTML5的特性 3 1.3  CSS 4 2.JavaScript 6 2.1特性 7 2.2编程 8 3.Sp ...