堆栈存储结构示意图
堆栈进出原则
先进后出
数据集合
堆栈的数据集合的元素可以表示为任意的类类型。
操作集合
(1)入栈push(obj):把数据元素obj插入堆栈;
(2)出栈pop():出栈,删除的数据元素由函数返回;
(3)取栈顶元素getTop():取当前栈顶的数据元素并有函数返回;
(4)notEmpty():若栈非空则返回true,否则返回false.
Stack接口设计
Stack.java
package 堆栈;
public interface Stack {
//入栈
public void push(Object obj)throws Exception;
//出栈
public Object pop() throws Exception;
//获取栈顶元素
public Object getTop()throws Exception;
//判断栈不为空
public boolean notEmpty();
}
顺序堆栈设计
SeqStack.java
package 堆栈;
public class SeqStack implements Stack{final int defaultSize=10;
int top;
Object []stack;
int maxStackSize;
public SeqStack(){
initiate(defaultSize);
}
public SeqStack(int sz){
initiate(sz);
}
public void initiate(int sz){
maxStackSize=sz;
top=0;
stack=new Object[sz];
}
public void push(Object obj)throws Exception{
if(top==maxStackSize){
throw new Exception("堆栈已满!");
}
stack[top]=obj;
top++;
}
public Object pop()throws Exception{
if(top==0){
throw new Exception("堆栈已空!");
}
top--;
return stack[top];
}
public Object getTop()throws Exception{
if(top==0){
throw new Exception("堆栈已空!");
}
return stack[top-1];
}
public boolean notEmpty(){
return (top>0);
}
}
顺序堆栈类的测试
SeqStackTest.java
package 堆栈;
public class SeqStackTest {
public static void main(String[] args) {
SeqStack mystack=new SeqStack();
int test[]={1,3,5,7,9,11};
int n=6;
try{
for(int i=0;i<n;i++)
{
mystack.push(new Integer(test[i]));
}
System.out.println("当前栈顶元素为:"+mystack.getTop());
System.out.println("出栈元素序列为:");
while(mystack.notEmpty()){
System.out.println(mystack.pop());
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}