一个栈准备数据:
一个固定长度的数组
一个指针top
压栈、出栈等操作是操作指针
//实现栈
package com.gec2;
class DATA{
String name;
int age;
public DATA() {
super();
// TODO Auto-generated constructor stub
}
public DATA(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "DATA [name=" + name + ", age=" + age + "]";
}
}
public class StackType {
static final int MAXLEN = 50;
DATA[] dataStack ;
//栈顶
int top = -1;
//构造函数
StackType() {
dataStack = new DATA[MAXLEN];
top = -1;
}
//判断是否是空栈 静态
static boolean STIsEmpty(StackType st) {
boolean t;
if(st == null ) return true;
t=(st.top == -1);
return t;
}
//判断满栈
static boolean STIsFull(StackType st) {
boolean t;
if(st == null ) return true;
t = (st.top == MAXLEN-1);
return t;
}
//清空栈
static void STClean(StackType st) {
st.top = -1;
}
//入栈
int pushST(DATA data) {
if(top>MAXLEN-1) return -1;
dataStack[++top] = data;
return 1;
}
//出栈
DATA popST() {
if(top == -1) return null;
return dataStack[top--];
}
//读取栈顶元素
DATA peekST() {
if(top == -1) return null;
return dataStack[top];
}
}
//测试实例
package com.gec2;
public class MainTest {
public static void main(String[] args) {
//创建 DATA 数据栈
StackType st = new StackType();
//准备数据
DATA data0 = new DATA("小鸟0",23);
DATA data1 = new DATA("小鸟1",23);
DATA data2 = new DATA("小鸟2",23);
DATA data3 = new DATA("小鸟3",23);
DATA data4 = new DATA("小鸟4",23);
DATA data5 = new DATA("小鸟5",23);
//压栈
st.pushST(data0);
//System.out.println("top="+st.top);
st.pushST(data1);
st.pushST(data2);
st.pushST(data3);
st.pushST(data4);
st.pushST(data5);
//出栈
st.popST();
st.popST();
DATA popDATA = st.popST();
System.out.println("popdata="+popDATA);
//清空栈
StackType.STClean(st);
System.out.println("top="+st.top);
//释放空间
//st = null;
System.out.println("is null:"+(st == null));
//判断是否为空
System.out.println(StackType.STIsEmpty(st));
//满栈
while(!StackType.STIsFull(st)) {
DATA data = new DATA("full", 1);
st.pushST(data);
}
System.out.println("is full:"+StackType.STIsFull(st));
System.out.println("top="+st.top);
}
}