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
*/
public class MyStack {
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上: