如何用Java实现一个简易的栈(Stack)
栈是一种典型的“后进先出(LIFO)”的数据结构,下面我们来看下如何使用Java编写一个简易的栈
1.接口 IStack
public interface IStack {
//置空
void clear();
//判空
boolean isEmpty();
//返回栈中元素个数
int length();
//读取栈顶元素
Object peek();
//入栈
void push(Object o);
//返回栈顶元素 出栈
Object pop();
}
2.实现类 MyStack
public class MyStack implements IStack {
public Object[] elem;//对象数组
public int top = -1;//默认栈顶元素位置 注意为0和为-1的区别
public int MAX_SIZE = 50;//存放元素的最大数量
public MyStack() {
this.elem = new Object[MAX_SIZE];
}
public MyStack(int size) {
if (size <= 0) {
System.err.println("wrong size!!! using default");
} else {
MAX_SIZE = size;
}
elem = new Object[MAX_SIZE];
}
@Override
public void clear() {
top = -1;
elem = new Object[MAX_SIZE];
}
@Override
public boolean isEmpty() {
return top == -1;
}
@Override
public int length() {
//一开始top为-1 计算长度时需要加1
//若top为0 则不需要
return top + 1;
}
@Override
public Object peek() {
if (top == -1) {
return null;
} else {
return elem[top];
}
}
@Override
public void push(Object o) {
if (top + 1 == MAX_SIZE) {
System.err.println("stack is full!");
return;
}
//top先加1 再把元素放在该位置 注意 ++top 和 top++ 的区别
this.elem[++top] = o;
}
@Override
public Object pop() {
if(isEmpty()){
System.err.println("stack has no element!");
return null;
}
//先把top所在元素返回 之后top减1
return elem[top--];
}
}
测试类 StackTest
public class StackTest {
public static void main(String[] args) {
MyStack s = new MyStack(5);
s.push("1");
s.push("2");
s.push("3");
s.push("4");
s.push("5");
//s.push("6");//不能添加进去
System.out.println("length is " + s.length());
System.out.println("peek result is " + s.peek());
System.out.println("isEmpty " + s.isEmpty());
System.out.println("----------------------------------------------");
Object pop = s.pop();
System.out.println("pop result is " + pop);
System.out.println("after pop length is " + s.length());
System.out.println("----------------------------------------------");
s.clear();
System.out.println("after clear length is " + s.length());
System.out.println("isEmpty " + s.isEmpty());
}
}