实现栈的两种方式(Java)
1使用数组实现栈
public class ArrayStack<E> {
Object[] stack;
int top;
public ArrayStack(int maxsize){
top = -1;
stack = new Object[maxsize];
}
public ArrayStack(){
top = -1;
stack = new Object[10];
}
public boolean isFull(){
return top == stack.length - 1;
}
public boolean isEmpty(){
return top == -1;
}
public void push(E e){
if (isFull()){
stack = Arrays.copyOf(stack,stack.length*2);
}
stack[++top] = e;
}
public E topStack(){
if (isEmpty()){
return null;
}
return (E) stack[top];
}
public E pop(){
if (isEmpty()){
return null;
}
return (E) stack[top--];
}
public int size(){
if (top == -1){
return -1;
}
int count = 0;
for (int i = 0; i < stack.length; i++) {
if (stack[i] != null){
count++;
}
}
return count;
}
public void show(){
if (isEmpty()){
System.out.println("====栈空,无数据====");
return;
}
for (int i = top; i >= 0; i--) {
System.out.println("stack["+i+"]"+stack[i]);
}
}
2.使用链表实现栈
**
* @Version: 1.0
* @Author: alice
* @Date: 2021/11/30
* @Content: 用链表实现栈
*/
public class LinkedStack<T> {
private StackNode<T> top = null;
public boolean isEmpty(){
return top == null;
}
public void push(T val){
StackNode<T> node = new StackNode<>(val);
node.next = top;
top = node;
}
public T pop(){
if (isEmpty()){
return null;
}
T data = top.data;
top = top.next;
return data;
}
public T reHead(){
if (isEmpty()){
return null;
}
return top.data;
}
class StackNode<T> {
T data;
StackNode<T> next;
public StackNode(T data) {
this.data = data;
}
public StackNode(){};
}
}