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方法说明
- 输入n,建立可包含n个元素的ArrayIntegerStack对象
- 输入m个值,均入栈。每次入栈均打印入栈返回结果。
- 输出栈顶元素,输出是否为空,输出size
- 使用Arrays.toString()输出内部数组中的值。
- 输入x,然后出栈x次,每次出栈均打印。
- 输出栈顶元素,输出是否为空,输出size
- 使用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();
}
}