栈是一种特殊的线性表,它的特殊之处在于它只能在一端进行操作,元素的进出是FILO(先进后出)的,栈有几个基本的方法:
- pop();返回栈顶元素,并将栈顶元素弹出
- peek();返回栈顶元素,不将栈顶元素弹出
- push(Object obj);将元素obj压入栈中
- isEmpty();判断栈是否为空
- expand(int size);对栈的空间进行扩容
以下给出java是通过数组实现栈操作的代码:
public class MyStack<T> {
Object[] stack;
int top;
public MyStack() {
stack = new Object[10];//初始化数组大小为10
top = 0;
}
/*判断栈是否为空
* */
public boolean isEmpty() {
return top == 0;
}
/*返回栈顶元素
* */
public T peek() {
T t = null;
if (isEmpty() == false) {
t = (T) stack[top - 1];
}
return t;
}
/*弹出栈顶元素
* */
public T pop() {
T t = null;
if (isEmpty() == false) {
t = (T) stack[top - 1];
top--;
}
return t;
}
/*压栈
* */
public void push(T t) {
expand(top + 1); //扩容
stack[top] = t;
top++;
}
/*对栈进行扩容
* */
public void expand(int size) {
int len = stack.length;
if (size > len) {
size = size * 3 / 2 + 1;
stack = Arrays.copyOf(stack, size);
}
}
}
下面给出测试代码
public static void main(String[] args) {
MyStack<String> myStack = new MyStack<>();
myStack.push("你干嘛");
myStack.push("诶呦");
myStack.push("啊哈有");
System.out.println(myStack.peek());
System.out.println(myStack.pop());
System.out.println(myStack.isEmpty());
System.out.println(myStack.pop());
System.out.println(myStack.pop());
}
测试结果