1、定义数据元素类 Data
package stack;
public class Data {
int stuId; //学生ID
String stuName; //学生姓名
public Data(int stuId, String stuName) {
super();
this.stuId = stuId;
this.stuName = stuName;
}
@Override
public String toString() {
return "stuId=" + stuId + ", stuName=" + stuName ;
}
}
2、定义栈结构类 StackType
package stack;
public class StackType {
static final int MAX_SIZE = 50;
Data[] data = new Data[MAX_SIZE];
int top;
public StackType(){
this.top = -1; //初始化栈顶
}
/**
* 判断是否空栈
* @return
*/
public boolean stackIsEmpty(StackType st){
return st.top==-1;
}
/**
* 判断是否满栈
* 当栈顶引用值为MAX_SIZE-1时表示满栈了
* @param st
* @return
*/
public boolean stackIsFull(StackType st){
return st.top==MAX_SIZE-1;
}
/**
* 清空栈
* 栈顶引用值为-1表示一个空栈
* @param st
*
*/
public boolean stackClear(StackType st){
if(st!=null){
st.top = -1;
return true;
}
return false;
}
/**
* 释放栈
* @param st
*/
public void stackFree(StackType st){
if(st!=null){
st = null;
System.out.println("栈已释放");
}
}
/**
* 入栈
* @param st
* @param data
* @return
*/
public boolean stackPush(StackType st,Data data){
if(st.top>=MAX_SIZE-1){
System.out.println("栈溢出,入栈失败!");
return false;
}
st.data[++st.top] = data;
return true;
}
/**
* 出栈
* @param st
* @return
*/
public Data stackPop(StackType st){
Data data;
if(st.top==-1){
System.out.println("栈为空");
return null;
}
data = st.data[st.top--];
return data;
}
/**
* 读栈顶的元素
* @param st
* @return
*/
public Data stackPeek(StackType st){
if(st.top==-1){
System.out.println("栈为空");
return null;
}
return st.data[st.top];
}
}
3、测试类 TestStack
package stack;
public class TestStack {
public static void main(String[] args) {
StackType st = new StackType();
for(int i=1;i<=50;i++){
Data data= new Data(i,String.valueOf(i));
st.stackPush(st, data);
}
System.out.println("栈是否为空?"+st.stackIsEmpty(st));
System.out.println("栈是否已满?"+st.stackIsFull(st));
System.out.println("栈顶元素:"+st.stackPeek(st));
System.out.println("出栈:"+st.stackPop(st));
System.out.println("出栈:"+st.stackPop(st));
System.out.println("栈顶元素:"+st.stackPeek(st));
System.out.println("清空栈:"+st.stackClear(st));
System.out.println("将栈清空后再出栈:"+st.stackPop(st));
st.stackFree(st);
}
}
4、测试结果