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]

作者: 郑如滨

单位: 集美大学

时间限制: 400 ms

内存限制: 64 MB

import com.sun.org.apache.regexp.internal.RE;

import java.util.Arrays;
import java.util.Scanner;

interface IntegerStack{
    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();      //返回栈中元素个数
}
class ArrayIntegerStack implements IntegerStack{
    private int a[];
    private int end=0;

    public ArrayIntegerStack(int num) {
        a=new int[num];
    }

    @Override
    public Integer push(Integer item) {
        if (item==null){
            return null;
        }
        if (end==a.length){
            return null;
        }
        a[end]=item;
        end++;
        return item;
    }

    @Override
    public Integer pop() {
        if (end==0){
            return null;
        }
        end--;
        return a[end];
    }

    @Override
    public Integer peek() {
        if (end==0){
            return null;
        }
        return a[end-1];
    }

    @Override
    public boolean empty() {
        if (end==0){
            return true;
        }
        return false;
    }

    @Override
    public int size() {
        return end;
    }

    @Override
    public String toString() {
        String s="";
        int i=0;
        while (i<end-1){
            s+=a[i]+", ";
            i++;
        }
        if (end==0){
            while (i<a.length-1){
                s+="null, ";
                i++;
            }
            s+="null";
        }else {
            if (end<a.length){
                s+=a[i]+", ";
                for (int p=0;p<a.length-end-1;p++){
                    s+="null, ";
                }
                s+=null;
            }else {
                s+=a[i];
            }
        }

        return "["+s+"]";
    }
}
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        ArrayIntegerStack arrayIntegerStack = new ArrayIntegerStack(sc.nextInt());
        int num=sc.nextInt();
        for(int i=0;i<num;i++){
            System.out.println(arrayIntegerStack.push(sc.nextInt()));
        }
        System.out.println(arrayIntegerStack.peek()+","+arrayIntegerStack.empty()+","+arrayIntegerStack.size());
        String arr=arrayIntegerStack.toString();
        System.out.println(arrayIntegerStack.toString());
        int time=sc.nextInt();
        for (int i=0;i<time;i++){
            System.out.println(arrayIntegerStack.pop());
        }
        System.out.println(arrayIntegerStack.peek()+","+arrayIntegerStack.empty()+","+arrayIntegerStack.size());
        System.out.println(arr);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值