java初步学习之堆栈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liyangxueit/article/details/50809355

堆栈:简称为栈。是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子类的对象,并不是基本数据类型。


猜你喜欢

转载自blog.csdn.net/liyangxueit/article/details/50809355
今日推荐