Eclipse中新建一个项目,名字随便取,粘贴下面的三个源程序代码可以,运行可以看到程序的效果。
IntStack.java 内容如下:
public interface IntStack {
void push(int item);//store an item
int pop();//retrieve an item
}
后面的两个类均对上面的IntStack接口进行了各自的实现。FixedStack的是固定大小的实现,DynStack的是动态的扩展的实现。
FixedStack.java内容如下:
// An implementation of IntStack that use fixed storage
class FixedStack implements IntStack{
private int stck[];//这就是个数组,用来存整数
private int tos;
//类的构造函数,负责分配和初始化这个stack:allocate and init stack
FixedStack(int size){
stck=new int[size];
tos=-1;
}
//push an item onto the stack 压入一个item
public void push(int item){
if(tos==stck.length-1)//use lenghth member. 如果tos 等于 长度减去1,
//例如:长度为10,如果tos==9,那么这个数组就是满的。
System.out.println("Stack is full");
else
stck[++tos]=item;
}
//Pop an item from the stack
public int pop(){
if(tos<0){
System.out.println("Stack underfolw.");
return 0;
}
else
return stck[tos--];
}
}
class IFTest{
public static void main(String args[]){
FixedStack mystack1=new FixedStack(5);
FixedStack mystack2=new FixedStack(8);
//push some numbers to the stack
for(int i=0;i<5;i++) mystack1.push(i);
for(int i=0;i<8;i++) mystack2.push(i);
//pop up numbers
System.out.println("Stack numbers in mystack1:");
for(int i=0;i<5;i++)
System.out.println(mystack1.pop());
System.out.println("Stack numbers in mystack2:");
for(int i=0;i<8;i++)
System.out.println(mystack2.pop());
}
}
DynStack.java内容如下:
// implement a growable stack
public class DynStack implements IntStack{
private int stck[];//这就是个数组,用来存整数
private int tos;
//类的构造函数,负责分配和初始化这个stack:allocate and init stack
DynStack(int size){
stck=new int[size];
tos=-1;
}
//push an item onto the stack 压入一个item
public void push(int item){
//if the stack is full, allocate a large stack
if(tos==stck.length-1){
int temp[]=new int[stck.length*2];//double size
for(int i=0;i<stck.length;i++) temp[i]=stck[i];
stck=temp;
stck[++tos]=item;
}
else
stck[++tos]=item;
}
//pop up item
public int pop(){
if(tos<0){
System.out.println("Stack underfolw.");
return 0;
}
else
return stck[tos--];
}
}
class IFTest2{
public static void main(String args[]){
DynStack mystack1=new DynStack(5);
DynStack mystack2=new DynStack(8);
//these loops cause each stack to grow
for(int i=0;i<12;i++) mystack1.push(i);
for(int i=0;i<20;i++) mystack2.push(i);
System.out.println("Stack numbers in mystack1:");
for(int i=0;i<12;i++)
System.out.println(mystack1.pop());
System.out.println("Stack numbers in mystack2:");
for(int i=0;i<20;i++)
System.out.println(mystack2.pop());
}
}