栈
栈是一种先进后出的数据结构,如下图:
package datastructure;
public class MyStack<E> {
private Object [] data;
private int size;
public MyStack(int capacity) {
if (capacity <= 0)
throw new IllegalArgumentException("栈的大小必须大于0");
data = new Object[capacity];
}
// 压栈
public void push(E item) {
if (isFull())
throw new IllegalArgumentException("栈已经满了");
data[size++] = item;
}
// 出栈
public E pop() {
if (isEmpty())
throw new IllegalArgumentException("栈是空的");
E e = (E)data[--size];
data[size] = null;
return e;
}
// 返回栈顶元素
public E peek() {
if (isEmpty())
throw new IllegalArgumentException("栈是空的");
return (E)data[size-1];
}
// 判断是否为已满
public boolean isFull() {
return size() == data.length;
}
// 判断是否为空
public boolean isEmpty() {
return size() == 0;
}
// 返回当前栈的大小
public int size() {
return size;
}
测试一下
public static void main(String[] args) {
MyStack<Integer> myStack = new MyStack<>(3);
System.out.println("isEmpty()=" + myStack.isEmpty());
System.out.println("isFull()=" + myStack.isFull());
myStack.push(1);
myStack.push(2);
myStack.push(3);
System.out.println("---------------------");
System.out.println("isEmpty()=" + myStack.isEmpty());
System.out.println("isFull()=" + myStack.isFull());
System.out.println("---------------------");
myStack.pop();
System.out.println("Top of stack=" + myStack.peek());
}
}
运行结果
isEmpty()=true
isFull()=false
---------------------
isEmpty()=false
isFull()=true
---------------------
Top of stack=2