/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package arthur.datastruct.programe;
import java.util.*;
/**
*
* @author dell
*/
public class MyStack {
private int size;//栈中元素的个数
private Object[] elements;//栈数组
private final int DEFAULT_CAPACITY = 10;//栈默认的大小
public MyStack() {
this.size = 0;
elements = new Object[DEFAULT_CAPACITY ];
}
/**
* 返回栈中元素的个数
* @return
*/
public int size() {
return size;
}
/**
* 判断栈是否为空
* @return
*/
public boolean empty() {
return 0 == size();
}
/**
* 返回栈的首部但不移除首部元素
* @return
*/
public Object peek() {
if (this.empty()) {
throw new EmptyStackException();
}
int index = size;
return elements[--index];
}
/**
* 移除堆栈顶部的对象,并作为此函数的值返回该对象。
* @return
*/
public Object pop() {
Object object = this.peek();
int index = size;
remove(--index);
return object;
}
/**
* 删除索引为index的那个元素
* @param index
*/
public void remove(int index) {
if (index >= size()) {
throw new ArrayIndexOutOfBoundsException(index + " >= "
+ size());
} else if (index < 0) {
throw new ArrayIndexOutOfBoundsException(index);
}
int j = size - index - 1;//得到位于索引index之后的元素的下标
if(j>0)//如果下标存在
System.arraycopy(elements, index+1, elements, index, j);
elements[--size] = null;
}
/**
* 入栈操作,把项压入堆栈顶部。
* @param object
* @return
*/
public Object push(Object object) {
if(null==object)
throw new NullPointerException();
if (this.size > elements.length) {
this.doubleCapacity();
}
elements[size++] = object;
return object;
}
/**
* 扩充栈的空间,如果栈满了,就把空间扩从为原来的二倍
* @return
*/
private void doubleCapacity() {
int newCapacity = elements.length
关注
打赏
热门博文
- Flutter之Widget构建过程详解
- Flutter之Widget 更新机制原理浅析
- 从源码角度分析android事件分发处理机制
- android事件拦截处理机制详解
- android 获取IP地址
- android 获取生肖和星座
- Android TextView setCompoundDrawables设置图片不显示解决方案
- Android Stuido集成LeakCanary编译失败TransformException、transformClassesWithDexBuilderForDebug
- Flutter实战之go_router路由组件入门指南
- HarmonyOS鸿蒙学习笔记(9)Navigator组件实现页面路由跳转