1,定义一个容器 用于存储栈元素
2,定义栈顶标记 用于标记栈顶的位置
3,入栈
4,出栈
5,获取栈顶元素
6,判断栈是否为空
7,清空当前栈
8,获取栈中有效元素的个数
9,返回栈的字符串的表现形式
下面的代码都是按照此图
/**
Stack是一个简单的由一维数组实现的栈结构
支持入栈 出栈 等常见的操作 但不支持动态扩容
此栈只存储int型数据
*/
public class Stack{
//定义一个数组容器 用于存储栈元素 data.length是最大容量
private int [] data;
//栈顶标记 用于标记栈顶元素的位置 当栈为空时,top=-1,栈中有效元素的个数是top+1
private int top;
//默认最大容量为10
private int capacity=10;
/**
创建一个默认容量为10的栈
*/
public Stack(){
this.data=new int [capacity];
}
/**
创建一个指定容量为capacity的栈
@param capacity 由调用者传入的指定容量
如果capacity<0 则容量置为0
如果capacity>100 则容量置为100
*/
public Stack(int capacity){
if(capacity<0){
capacity=0;
}
if(capacity>100){
capacity=100;
}
this.data=new int [capacity];
}
/**
* 将元素e入栈,如果当前的栈已经满了,则无法加入
* @param e 用户指定入栈的元素
*/
public void push(int e){
if(top+1==data.length){
System.out.println(">>>栈已满,无法添加元素"+e);
return;
}
data[++top]=e;
}
/**
从栈中弹出一个元素,如果栈已经是空,则返回-1即可
* @return 返回当前栈顶的元素,如果栈为空则返回-1
*/
public int pop(){
if(top==-1){
System.out.println("栈为空,无法弹栈元素");
return -1;
}
return data[top--];
}
/**
获取当前栈顶元素,如果栈为空,则返回-1即可
@return 返回当前栈顶元素,如果栈为空,如果栈为空,则返回-1
*/
public int peek(){
if(top==-1){
System.out.println("栈为空,无法弹栈元素");
return -1;
}
return data[top];
}
/**
判断当前栈是否为空
@return true表示栈空,否则栈不为空
*/
public boolean isEmpty(){
return top==-1;
}
/**
清空当前的栈
*/
public void clear(){
top=-1;
}
/**
获取栈中有效元素的个数
*/
public int size(){
return top+1;
}
/**
获取栈中有效元素的个数
*/
public String toString(){
if(isEmpty()){
return "[]";
}
String s="[";
for(int i=0;i<size();i++){
s+=data[i];
if(i==size()-1){
s+="]";
}
else{
s+=",";
}
}
return s;
}
}