本文共 2793 字,大约阅读时间需要 9 分钟。
栈是一种先进后出的数据结构
套用现成的术语来讲:是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
下面直接来看实现:
/** *基于数组的栈表实现
* * @author white * @version $Id: MyStack, v 0.1 2016/9/21 0021 下午 8:32 white Exp $ */public class MyStackimplements 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(=) { MyStackmyStack = 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/