定义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]
作者: 郑如滨
单位: 集美大学
时间限制: 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);
}
}