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(); } }
代码已上传到git上:
https://github.com/xej520/xingej-algorithm