2020过年是一个充满疫情的年,也出不去在家复习一些java基础知识,用数组实现一个栈
要求这个栈具有push()、pop()(返回栈顶元素并出栈)、peek()
(返回栈顶元素不出栈)、isEmpty()、size()这些基本的方法。
每次入栈之前先判断栈的容量是否够用,如果不够用就用Arrays.copyOf()进行扩容
import java.util.Arrays;
/**
* 自己实现一个栈,要求这个栈具有push()、pop()(返回栈顶元素并出栈)、peek()
* (返回栈顶元素不出栈)、isEmpty()、size()这些基本的方法。
* 每次入栈之前先判断栈的容量是否够用,如果不够用就用Arrays.copyOf()进行扩容
*/
public class MyStack {
/*
* 用数组实现一个栈 、具有初始化长度size
*
*/
// 栈内值
private Object[] values;
// 当前使用长度
private int size;
// 最大长度
private int length;
public MyStack() {
// 初始化长度是8
this.values = new Object[1 << 3];
this.length = 1 << 3;
this.size = 0;
}
// 是否是空栈
public boolean isEmpty() {
return size == 0;
}
// 是否满了
private boolean isFull() {
return size == length;
}
// 扩容
private void dilatancy() {
if (isFull()) {
// 扩容一倍
values = Arrays.copyOf(values, length << 1);
length = length << 1;
}
}
// 入栈
public void push(Object o) {
if (isFull()) {
dilatancy();
}
values[size] = o;
size++;
}
// 出栈
public void pop() {
if (size > 0) {
values[size] = null;
size--;
} else {
System.out.println("空栈..");
}
}
// 返回栈顶元素
public Object peek() {
if (size > 0) {
return values[size - 1];
} else {
return null;
}
}
// 长度
public int size() {
return size;
}
public String toString() {
String s = "[";
String tmp = "";
for (int i = 0; i < size; i++) {
tmp += "," + values[i].toString();
}
if (tmp.startsWith(",")) {
tmp = tmp.substring(1);
}
s += tmp + "]";
return s;
}
}
测试一下。。
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.push(3);
myStack.push(4);
myStack.push(5);
myStack.push(6);
myStack.push(7);
myStack.push(8);
System.out.println(myStack.peek());//8
System.out.println(myStack.size());//8
for (int i = 0; i < 8; i++) {
myStack.pop();
}
System.out.println(myStack.isEmpty());// true
myStack.pop();//空栈..