堆栈:简称为栈。是java中一种重要的线性数据结构,在对数据进行操作时遵循的时“先出后进”的准则。
java.util包中的提供的stack类是java实现堆栈的工具类。实际上stack类是向量(Vector)的一种。
Stack
1.构造函数:
public Stack();用途:用来创建空的堆栈序列,在创建堆栈时可以直接进行调用;
2.压栈与堆栈
压栈:将数据放入(压入)堆栈中;public Object push(Obeject item)
弹栈:将堆栈中的数据从栈中取出,并且返回这个对象:public Object pop()
3.检查堆栈是否为空
public boolean empty()
以下是我对自学教材中提供的applet小程序的代码分析:
package ly;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class UseStack extends Applet implements ActionListener {
Stack Mystack;
Label prompt=new Label("新数据:");
Button pushBtn=new Button("压栈");
Button popBtn=new Button("弹栈");
TextField input=new TextField(5);
int[] DrawStack=new int[10];//创建一个数组用来装堆栈中有的数据;
int[] PoppedOut=new int[20];//创建另外一个数组用来装弹出的数据;
int StackCnt=0;//一个数用来记录堆栈中的数据量
int PopCnt=0;//一个用来记录弹出的数据个数
String msg="";
public void init(){
Mystack=new Stack();
add(prompt);
add(input);
add(pushBtn);
add(popBtn);
pushBtn.addActionListener(this);
popBtn.addActionListener(this);
}
public void paint(Graphics g){
for (int i=0;i<StackCnt;i++)
{
g.drawRect(50,200-i*20, 80, 20);
g.drawString(Integer.toString(DrawStack[i]), 80, 215-i*20);
}
for(int i=0;i<PopCnt;i++){
g.drawString(Integer.toString(PoppedOut[i]), 200+i*20, 100);
g.drawString("堆栈", 70, 236);
g.drawString("栈底", 135, 225);
g.drawString("栈顶", 160, 225-StackCnt*20);
g.drawString(msg,200,140);
}
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand()=="压栈"){
if(StackCnt<10)//如果堆栈中的数据个数小于十,说明堆栈可以进行压栈的操作加入数据
{
Mystack.push(new Integer(input.getText()));
DrawStack[StackCnt++]=Integer.parseInt(input.getText());//新增的数据在数据中的序号排在已有的数据之后
input.setText("");
}
else
msg="输入数据过多,请先弹栈";
}
else if(e.getActionCommand()=="弹栈")
{
if(!Mystack.empty()){
StackCnt--;
PoppedOut[PopCnt++]=((Integer)(Mystack.pop())).intValue();
}
else
msg="堆栈已空,不能再弹栈";
}
repaint();
}
}
堆栈压人堆栈和弹出堆栈的都是Object类对象或者是Object子类的对象,并不是基本数据类型。