/*
* 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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?