1.创建接口
package myproject.work.stack_demo; /** * 栈的接口 * @param <T> */ public interface Stack<T> { /** * 栈是否为空 * @return */ boolean isEmpty(); /** * data元素入栈 * @param data */ void push(T data); /** * 返回栈顶元素,未出栈 * @return */ T peek(); /** * 出栈,返回栈顶元素,同时从栈中移除该元素 * @return */ T pop(); }
2.创建实现类
package myproject.work.stack_demo; import java.io.Serializable; /** * 自定义栈的实现方法 * @param <T> */ public class myStack<T> implements Stack<T> ,Serializable{ public static final long serialVersionUID = -5413303117698554397L; /** * 栈顶指针 空栈为-1 * */ private int top=-1; /** * 栈容量的大小默认为10 */ private int capacity=10; /** * 存放元素的数组 */ private T[] array; //栈中存放对象的标识 private int size; /** * 初始化创建数组 */ public myStack() { array= (T[]) new Object[capacity]; } /** * 传入创建数组数量 * @param capacity */ public myStack(int capacity) { array= (T[]) new Object[capacity]; } /** * 获取对象数量 * @return */ public int size(){ return size; } /** * 判断栈内数据是否为空 * @return */ @Override public boolean isEmpty() { //判断栈顶是否为空 return this.top==-1; } /** * 从栈顶插入数据 入栈 * @param data */ @Override public void push(T data) { //如果对象的个数 大于 开辟空间的容量 if (size()>array.length){ ensureCapacity(this.capacity*2+1); } //从栈顶插入数据 array[++top]=data; //增加size size++; } /** * 扩容的方法 * @param capacity */ public void ensureCapacity(int capacity){ //如果对象的个数 小于 开辟空间的容量 if (size<capacity){ return;//直接返回 } T[] old = this.array; //重新扩容 array= (T[]) new Object[capacity]; for (int i = 0; i <old.length ; i++) { //赋值 array[i]=old[i]; } } /** * 获取栈顶元素 * @return */ @Override public T peek() { if (isEmpty()){ throw new RuntimeException("nulpoint"); } //获取栈顶 return array[top]; } /** * 获取栈顶元素 出栈 * @return */ @Override public T pop() { if (isEmpty()){ throw new RuntimeException("nulpoint"); } T t = array[top]; //直接设置size的长度 size--; //设置栈顶的索引 top--; return t; } public static void main(String[] args) { myStack<Integer> stack=new myStack<>(); stack.push(1); stack.push(2); stack.push(3); stack.push(4); System.out.println( stack.pop()); System.out.println( stack.pop()); System.out.println( stack.pop()); System.out.println( stack.pop()); } }
运行结果
D:\java\jdk\bin\java "-javaagent:E:\idea\IntelliJ IDEA 2017.2.3\lib\idea_rt.jar=51608:E:\idea\IntelliJ IDEA 2017.2.3\bin" -Dfile.encoding=UTF-8 -classpath D:\java\jdk\jre\lib\charsets.jar;D:\java\jdk\jre\lib\deploy.jar;D:\java\jdk\jre\lib\ext\access-bridge-64.jar;D:\java\jdk\jre\lib\ext\cldrdata.jar;D:\java\jdk\jre\lib\ext\dnsns.jar;D:\java\jdk\jre\lib\ext\jaccess.jar;D:\java\jdk\jre\lib\ext\jfxrt.jar;D:\java\jdk\jre\lib\ext\localedata.jar;D:\java\jdk\jre\lib\ext\nashorn.jar;D:\java\jdk\jre\lib\ext\sunec.jar;D:\java\jdk\jre\lib\ext\sunjce_provider.jar;D:\java\jdk\jre\lib\ext\sunmscapi.jar;D:\java\jdk\jre\lib\ext\sunpkcs11.jar;D:\java\jdk\jre\lib\ext\zipfs.jar;D:\java\jdk\jre\lib\javaws.jar;D:\java\jdk\jre\lib\jce.jar;D:\java\jdk\jre\lib\jfr.jar;D:\java\jdk\jre\lib\jfxswt.jar;D:\java\jdk\jre\lib\jsse.jar;D:\java\jdk\jre\lib\management-agent.jar;D:\java\jdk\jre\lib\plugin.jar;D:\java\jdk\jre\lib\resources.jar;D:\java\jdk\jre\lib\rt.jar;C:\java_learn\javaStructures-master\javaStructures-master\out\production\javaStructures myproject.work.stack_demo.myStack 4 3 2 1 Process finished with exit code 0
代码不全只是自己记录学习,借鉴:https://blog.csdn.net/javazejian/article/details/52953190;强烈推荐此大神博客。。。