基于数组实现栈
package Java.src.test.hzj.charpter_04;
import java.util.Arrays;
public class MyStackByArray<T> {
private Object[] stack;
private int top;
//初始化栈空间
public MyStackByArray(){
stack = new Object[10];
}
//判空
public boolean isEmpty(){
return top == 0;
}
//查看栈顶元素
public T peek(){
T t = null;
if(top>0){
t = (T) stack[top-1];
}
return t;
}
//入栈
public void push(T t){
if(top == stack.length){
stack = Arrays.copyOf(stack,stack.length*2);
}
stack[top++] = t;
}
//出栈
public T pop(){
T t = peek();
if(top>0){
stack[--top] = null;
}
return t;
}
}
这种实现方法的top指针指向的是栈顶元素的上面一个地方,如想要top指向栈顶元素只需要在入栈时加个判断即可
基于链表实现栈
package Java.src.test.hzj.charpter_04;
public class MyStackByList<T> {
class Node<T> {
public T t;
public Node next;
}
public Node<T> head;
//初始化链表头
public MyStackByList() {
head = null;
}
//判空
public boolean isEmpty() {
return head == null;
}
//查看栈顶元素
public T peek() {
if(head == null){
return null;
}
return head.t;
}
//入栈
public void push(T t) {
if(t == null){
throw new NullPointerException("参数不能为空");
}
if(head == null){
head = new Node<>();
head.t = t;
head.next = null;
}else{
Node temp = head;
head = new Node<>();
head.t = t;
head.next =temp;
}
}
//出栈
public T pop() {
if(head == null) {
return null;
}
T t = peek();
head= head.next;
return t;
}
}
栈顶元素就是链表的头,所以每次入栈时都是将入栈元素当作头节点来接入原来的链表