博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JAVA数据结构】栈(数组实现)
阅读量:4078 次
发布时间:2019-05-25

本文共 2793 字,大约阅读时间需要 9 分钟。

栈是一种先进后出的数据结构

套用现成的术语来讲:是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

下面直接来看实现:

/** * 

基于数组的栈表实现

* * @author white * @version $Id: MyStack, v 0.1 2016/9/21 0021 下午 8:32 white Exp $ */public class MyStack
implements Iterable {
/** 数组 */ private T[] arry; /** 当前栈大小 */ private int size = 0; /** 栈默认大小 */ private int DEFAULT_SIZE = 10; public MyStack() { arry = (T[]) new Object[DEFAULT_SIZE]; } public MyStack(int size) { if (size <= 0) { throw new IllegalArgumentException(); } arry = (T[]) new Object[size]; } /** * 重置数组大小 * @param resize */ public void resize(int resize) { T[] newArray = (T[]) new Object[resize]; for (int i = 0; i < size; i++) { newArray[i] = arry[i]; } arry = newArray; } /** * 取出栈顶元素 * @return */ public T pop() { if (size <= 0) { throw new ArrayIndexOutOfBoundsException(); } T t = arry[--size]; arry[size] = null; if (size <= arry.length / 4) { resize(arry.length / 2); } return t; } /** * 将元素压入栈顶 * @param t */ public void pust(T t) { if (size == arry.length) { resize(arry.length * 2); } arry[size++] = t; } /** * 获取栈深度 * @return */ public int size() { return size; } public Iterator
iterator() { return new MyStackEntry(); } private class MyStackEntry implements Iterator {
private int index = size; public boolean hasNext() { return index > 0; } public Object next() { return arry[--index]; } }}

调用以下方法测试:

public void test(=) {        MyStack
myStack = new MyStack
(); System.out.println("default Size:" + myStack.size()); for (int i = 0; i < 15; i++) {
myStack.pust("test" + i); } System.out.println("new Size:" + myStack.size()); Iterator
iterator = myStack.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } System.out.println("iterator Size:" + myStack.size()); for (int i = myStack.size(); i > 0; i--) {
System.out.println(myStack.pop()); } System.out.println("pop Size:" + myStack.size()); }

输出结果:

default Size:0new Size:15test14test13test12test11test10test9test8test7test6test5test4test3test2test1test0iterator Size:15test14test13test12test11test10test9test8test7test6test5test4test3test2test1test0pop Size:0

如有疑问,欢迎提出。


我的博客:blog.scarlettbai.com

转载地址:http://vesni.baihongyu.com/

你可能感兴趣的文章
我看Kubernetes的操作不需要图形界面,只需要命令行就可以了,所以买个云服务器就可以弄了应该。
查看>>
现在来看,做个普罗米修斯的docker镜像对我而言并不难,对PX4仿真环境配置也熟悉了。
查看>>
删除docker容器和镜像的命令
查看>>
Docker run 命令
查看>>
Docker容器的创建、启动、和停止
查看>>
XTDrone的docker仿真镜像使用注意
查看>>
对ROS/普罗米修斯中线程锁的使用的理解
查看>>
VINS-Fusion Intel® RealSense™ Depth Camera D435i
查看>>
使用Realsense D435i运行VINS-Fusion并建图
查看>>
realsense d435i 跑 vins-fusion
查看>>
在Intel nuc上配置D435i、运行VINS-Mono及问题记录
查看>>
视觉SLAM——D435i运行VINS-MONO
查看>>
Ubuntu添加和删除源
查看>>
最优化算法——常见优化算法分类及总结
查看>>
卡尔曼滤波有若干种推导方式
查看>>
CDKF、UKF和EKF滤波算法
查看>>
Git tag标签与branch分支的区别
查看>>
对matlab simulink库的中文说明网站
查看>>
matlab如何将帮助变成简体中文
查看>>
我似乎隐约记得卡尔曼滤波到后期越来越不依赖于我们设置的一些初始参数,包括状态矩阵?
查看>>