package com.xingej.algorithm.datastructure.stack; /** * 数据结构之栈Stack * * 以long类型为测试用例 * * @author erjun 2017年12月4日 下午10:22:34 */ public class LongStack { // 底层数据存储 private long[] arr; // 最大元素数量 private int maxSize; // 当前元素的指针 private int top; public LongStack(int maxSize) { this.maxSize = maxSize; arr = new long[maxSize]; top = -1;// 默认值为-1,栈里没有元素 } // 添加数据 public void push(long value) { arr[++top] = value; } // 查看、并删除元素数据 public long pop() { return arr[top--]; // 先返回,然后,指针再减一 } // 仅仅查看元素 public long peek() { return arr[top]; } // 查看当前栈空间是否为空 public boolean isEmpty() { return top == -1; } // 查看当前栈空间是否已经满了 public boolean isFull() { return top == (maxSize - 1); } }
测试用例:
package com.xingej.algorithm.datastructure.stack; import org.junit.Test; /** * 栈的特点:先进后出; * * 栈和队列的区别? * * 栈的主要组成:一个存数据的容器,如数组,或者链表;一个指针;其他API行为都是围绕容器进行的 * * 队列的主要组成:一个存数据的容器,如数组,或者链表;两个指针。 * * 不适合大量存储,只是实现某种算法的一种手段吧, * * 受限访问方式 * * @author erjun 2017年12月6日 上午9:11:40 */ public class LongStackTest { @Test public void test() { LongStack theStack = new LongStack(10); theStack.push(29); theStack.push(2); theStack.push(9); theStack.push(5); while (!theStack.isEmpty()) { System.out.print(theStack.pop() + " "); } System.out.println(); } }
【备注】
package com.xingej.algorithm.datastructure.stack; /** * java 不允许泛型数组, 因此,这里定义的MyStack不能使用的 * * @author erjun 2017年12月6日 上午9:41:12 * @param <T> */ public class MyStack<T> { private T[] arr; // 栈允许最大的存储元素个数 private int maxSize; private int top; public MyStack(int maxSize) { this.maxSize = maxSize; // 这里会报错,java不允许泛型数组 // arr = new T[]; top = -1; } // 插入新元素 public void push(T element) { arr[++top] = element; // 一定先累加指针,不然会覆盖以前的数据 } // 从栈里弹出一个元素,一定是栈的顶部 public T pop() { return arr[top--]; // 弹出元素后,再让指针减一 } public T peek() { return arr[top]; // 返回当前栈的最顶部的元素 } // 查看当前栈空间是否为空 public boolean isEmpty() { return top == -1; } // 查看当前栈空间是否已经满了 public boolean isFull() { return top == (maxSize - 1); } }
代码已上传到git上:
https://github.com/xej520/xingej-algorithm