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{
public Integer push(Integer item);
public Integer pop();
public Integer peek();
public boolean empty();
public int size();
}
class ArrayIntegerStack implements IntegerStack{
Integer A[];
int Max,Size = 0;
public ArrayIntegerStack(int n) {
A = new Integer[n];
Max = n;
}
public Integer push(Integer item) {
if(item == null)
return null;
else if(Size == Max)
return null;
else {
A[Size] = item;
Size++;
return item;
}
}
public Integer pop() {
if(Size == 0)
return null;
Size--;
return A[Size];
}
public Integer peek() {
if(Size == 0)
return null;
else
return A[Size - 1];
}
public boolean empty() {
if(Size == 0)
return true;
else
return false;
}
public int size() {
return Size;
}
public String toString() {
return Arrays.toString(A);
}
}
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
ArrayIntegerStack A = new ArrayIntegerStack(n);
int m = in.nextInt();
for(int i = 0;i < m;i++) {
System.out.println(A.push(in.nextInt()));
}
System.out.println(A.peek() + "," + A.empty() + "," + A.size());
System.out.println(A.toString());
int x = in.nextInt();
for(int i = 0;i < x;i++) {
System.out.println(A.pop());
}
System.out.println(A.peek() + "," + A.empty() + "," + A.size());
System.out.println(A.toString());
in.close();
}
}