Java面向对象 - PTA上一道题的分享(第2篇)

7-2 jmu-Java-04面向对象进阶-03-接口-自定义接口ArrayIntegerStack (10 分)

  定义IntegerStack接口,用于声明一个存放Integer元素的栈的常见方法:

public Integer push(Integer item);
//如果item为null,则不入栈直接返回null。如果栈满,也返回null。如果插入成功,返回item。
public Integer pop();   //出栈,如果为空,则返回null。出栈时只移动栈顶指针,相应位置不置为null
public Integer peek();  //获得栈顶元素,如果为空,则返回null.
public boolean empty(); //如果为空返回true
public int size();      //返回栈中元素个数

  定义IntegerStack的实现类ArrayIntegerStack内部使用数组实现。创建时可指定内部数组大小。


main方法说明

  1. 输入n,建立可包含n个元素的ArrayIntegerStack对象
  2. 输入m个值,均入栈。每次入栈均打印入栈返回结果。
  3. 输出栈顶元素,输出是否为空,输出size
  4. 使用Arrays.toString()输出内部数组中的值。
  5. 输入x,然后出栈x次,每次出栈均打印。
  6. 输出栈顶元素,输出是否为空,输出size
  7. 使用Arrays.toString()输出内部数组中的值。

  思考

   如果IntegerStack接口的实现类内部使用ArrayList来存储元素,怎么实现?测试代码需要进行什么修改?


  输入样例

5
3
1 2 3
2

  输出样例

1
2
3
3,false,3
[1, 2, 3, null, null]
3
2
1,false,1
[1, 2, 3, null, null]

我写的代码,仅供参考:

import java.util.*;
interface IntegerStack
{
    Integer push(Integer item);
    //如果item为null,则不入栈直接返回null。如果栈满,也返回null。如果插入成功,返回item。
    Integer pop();   //出栈,如果为空,则返回null。出栈时只移动栈顶指针,相应位置不置为null
    Integer peek();  //获得栈顶元素,如果为空,则返回null.
    boolean empty(); //如果为空返回true
    int size();      //返回栈中元素个数
}
class ArrayIntegerStack implements IntegerStack
{
    Integer arr[];int point=0;
    public ArrayIntegerStack(int n)
    {
        arr=new Integer[n];
        point=0;
    }
    @Override
    public Integer push(Integer item)
    {
        if(point==arr.length) return null;
        else if(item==null) return null;
        else
        {
            arr[point]=item;
            ++point;
            return item;
        }
    }
    @Override
    public Integer pop()
    {
        if(point==0)
        {
            //point=0;
            return null;
        }
        --point;
        return arr[point];
    }
    @Override
    public Integer peek()
    {
        if(point-1<0) return null;
        return arr[point-1];
    }
    @Override
    public boolean empty()
    {
        if(point==-1) return true;
        else return false;
    }
    @Override
    public int size()
    {
        return point;
    }
}
public class Main
{
    public static void main(String args[])
    {
        Scanner in=new Scanner(System.in);
        ArrayIntegerStack a=new ArrayIntegerStack(in.nextInt());
        int m=in.nextInt();
        for(int q=1;q<=m;++q)
        {
            int temp=in.nextInt();
            System.out.println(a.push(temp));
        }
        Integer w=a.peek();boolean flag;
        if(w!=null) flag=false;
        else flag=true;
        System.out.println(w+","+flag+","+a.size());
        System.out.println(Arrays.toString(a.arr));
        int x=in.nextInt();
        for(int u=1;u<=x;++u)
        {
            System.out.println(a.pop());
        }
        Integer w2=a.peek();boolean flag2;
        if(w2!=null) flag2=false;
        else flag2=true;
        System.out.println(w2+","+flag2+","+a.size());
        System.out.println(Arrays.toString(a.arr));
        in.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值