package com.test.testStack;
import java.util.Arrays;
public class TestStack {
private Object[] array; // 模拟栈
private int capacity; // 栈的容量
private int top; // 栈顶元素的下标
public TestStack() {
this.capacity= 10;
this.array = new Object[10];
top = -1;
}
public TestStack(int capacity) {
if (maxSize <= 0)
throw new IllegalArgumentException("Illegal Argument");
this.capacity= capacity;
array = new Object[capacity];
top = -1;
}
/**
* 入栈
* @param value 新加入到栈顶的元素值
*/
private void push(Object elem) {
enlarge(top + 1);
array[++top] = elem;
}
/**
* 出栈
* @return 从栈顶出栈的元素值
*/
private Object pop() {
Object obj = null;
if (top > 0) {
obj = array[top];
array[top--] = null;
return obj;
}
else if (top == 0) {
obj = array[top];
top = -1;
return obj;
}
return obj;
}
/**
* 查看栈顶元素的值
* @return 栈顶元素的值
*/
private Object peek() {
return array[top];
}
/**
* 判断栈是否为空
* @return 是否为空
*/
private boolean isEmpty() {
return top == -1;
}
/**
* 判断栈是否为满
* @return 是否为满
*/
private boolean isFull() {
return top == (maxSize - 1);
}
/**
* 判断栈是否需要扩容
* @param capacity 新容量
* @return 是否需要扩容
*/
public boolean enlarge(int newCapacity) {
if (newCapacity >= capacity) {
boolean flag = (capacity << 1) > Integer.MAX_VALUE;
capacity = flag ? Integer.MAX_VALUE : capacity << 1;
array = Arrays.copyOfRange(array, 0, capacity);
return true;
}
return false;
}
public static void main(String[] args) {
TestStack demo = new TestStack(3);
demo.push(1);
demo.push(2);
demo.push(3);
demo.push(4);
System.out.println(demo.isFull());
demo.pop();
demo.pop();
System.out.println(demo.array.length);
System.out.println(demo.peek());
demo.pop();
System.out.println(demo.isEmpty());
}
}
数据结构 - 栈
猜你喜欢
转载自blog.csdn.net/qq_34561892/article/details/84076432
今日推荐
周排行