算法学习之栈的实现

来源:互联网 发布:win7 64位优化版下载 编辑:程序博客网 时间:2024/06/07 02:54

Stack<template> 称为类的泛型。也就是说指定了stack类中的数据为统一数据。比如将所有整数,或者字符类数据压入栈。如果出现将一个字符类的数据压入一个数据类的stack,系统则会报错。;比如下面的程序。Ops是一个string 类型的stack,vals是一个整数类型的stack。但是在ops中压入整数,在vals压入字符串,则会报错

public class study{

   

    public static void main(String[] args) {

        // TODO Auto-generated method stub

//      Circle c = new Circle(47);

        Stack<String> ops=new Stack<String>();

        Stack<Integer> vals=new Stack<Integer>();

        ops.push(1);

        vals.push("test1");

    }

}

提示如下错误:

Themethod push(String) in the type Stack<String> is not applicable for thearguments (int)

    The method push(Integer) in the typeStack<Integer> is not applicable for the arguments (String)

 

改成如下形式则正确

public class study{

   

    public static void main(String[] args) {

        // TODO Auto-generated method stub

//      Circle c = new Circle(47);

        Stack<String> ops=new Stack<String>();

        Stack<Integer> vals=new Stack<Integer>();

        ops.push("test");

        ops.push("test1");

        vals.push(2);

        vals.push(1);

       

        for(Stringt:ops){

            System.out.println("The string is:" +t);

        }

       

    }

}

也可以用类创建一个固定类长度的stack。如下自定义一个类,并用数组来模拟stack

classFixedCapacityStackofStrings{

    private Stringa[];

    private int n;

    public FixedCapacityStackofStrings(intcap){

        a=new String[cap];

    }

    public boolean isEmpty(){

        returnn==0;

    }

    public int size(){

        returnn;

    }

    public void push(String item){

        a[n++]=item;

    }

    public String pop(){

        returna[--n];

    }

}

 

public class study{

   

    public static void main(String[] args) {

        // TODO Auto-generated method stub

//      Circle c = new Circle(47);

        FixedCapacityStackofStrings s=new FixedCapacityStackofStrings(100);

        Scanner input=new Scanner(System.in);

        while (true){

            String item=input.next();

            if (item.equals("quit")){

                break;

            }

            if (!item.equals("-")){

                s.push(item);

            }

            else if(!s.isEmpty()){

                System.out.println(s.pop());

            }

        }

        System.out.println(s.size());

        System.out.println(s.pop());

    }

}

 

FixedCapacityStackofStrings这个类只能处理String的数据,如果要处理double或者int的数据,则必须另外写一个类。这样的话就显得很冗余。可以创建泛型类来解决这个问题。

classFixedCapacityStack<Item>{

    private Itema[];

    private int n;

    public FixedCapacityStack(intcap){

        a=(Item[])new Object[cap];

    }

    public boolean isEmpty(){

        returnn==0;

    }

    public int size(){

        returnn;

    }

    public void push(Item item){

        a[n++]=item;

    }

    public Item pop(){

        returna[--n];

    }

}

 

 

public class study{

   

    public static void main(String[] args) {

        // TODO Auto-generated method stub

//      Circle c = new Circle(47);

        FixedCapacityStack s=newFixedCapacityStack<Integer>(100);

        Scanner input=new Scanner(System.in);

        while (true){

            String item=input.next();

            if (item.equals("quit")){

                break;

            }

            if (!item.equals("-")){

                s.push(item);

            }

            else if(!s.isEmpty()){

                System.out.println(s.pop());

            }

        }

        System.out.println(s.size());

        System.out.println(s.pop());

    }

}

0 0
原创粉丝点击