## 数组实现
public class MStack1<T> {
private Object[] stack;
private int size;
MStack1() {
stack = new Object[10];
}
public boolean isEmpty() {
return size == 0;
}
//返回栈顶元素
public T peek() {
T t = null;
if (size > 0) {
t = (T) stack[size - 1];
}
return t;
}
public void push(T t) {
expansion(size + 1);
stack[size] = t;
size++;
}
public T pop() {
T t = peek();
if (size > 0) {
stack[size - 1] = null;
size--;
}
return t;
}
private void expansion(int i) {
int len = stack.length;
if (i + 1 > len) {
size = size * 3 / 2 + 1;
stack = Arrays.copyOf(stack, size);
}
}
public static void main(String[] args) {
MStack1<String> stack = new MStack1<>();
System.out.println(stack.peek());
System.out.println(stack.isEmpty());
stack.push("java");
stack.push("is");
stack.push("beautiful");
stack.push("language");
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
System.out.println(stack.peek());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
}
}
## 链表实现
public class MStack2<T> {
public class Node<T>{
private T t;
private Node next;
}
private Node<T> head;
MStack2(){
head = null;
}
//入栈
public void push(T t) throws Exception{
if(t == null){
throw new NoSuchPointcutException("param is empty");
}
if(head == null){
head = new Node<T>();
head.t = t;
head.next = null;
}else{
Node<T> temp = head;
head = new Node<T>();
head.t = t;
head.next = temp;
}
}
//出栈
public T pop(){
T t = head.t;
head = head.next;
return t;
}
public T peek(){
return head.t;
}
public boolean isEmpty(){
return head == null;
}
public static void main(String[] args) throws Exception{
MStack2 stack = new MStack2();
System.out.println(stack.isEmpty());
stack.push("Java");
stack.push("is");
stack.push("beautiful");
System.out.println(stack.peek());
System.out.println(stack.peek());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
}
}