请使用堆栈这一个数据结构实现简单FIFO(先入先出)队列,队列要实现两个方法: push、pop。
为自动测试方便,使用每行输入模拟操作:
1) push 1 表明向队列里面新增一个元素 1 , push 和元素之间用空格表示;
2) pop 表明输出当前队列里面的第一个元素,如果当前队列为空请输出null
请将每个输出以英文逗号拼接到一个字符串中。
["push 1","push 2","pop","pop","pop","push 3"]
"1,2,null"
static class MyQueue {
int[] queue;
int lo, hi, size, capacity;
public MyQueue(int n) {
this.lo = this.hi = this.size = 0;
this.capacity = n;
this.queue = new int[n];
}
public MyQueue() {
this(10);
}
public void push(int val) {
if (hi == capacity) {
if (lo > 0) {
int idx = 0;
for (int i = lo; i < hi; i++) {
queue[idx++] = queue[i];
}
lo = 0;
hi = idx;
} else {
//扩容
int[] newQueue = new int[capacity * 2];
System.arraycopy(queue, 0, newQueue, 0, capacity);
this.queue = newQueue;
}
}
this.queue[hi++] = val;
}
public int pop() {
if (lo == hi) return -1;
else {
return this.queue[lo++];
}
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// int[] nums = Arrays.stream().mapToInt(Integer::parseInt).toArray();
String[] ss = scanner.nextLine().split(",");
YuewenJavaTest.MyQueue myQueue = new YuewenJavaTest.MyQueue();
for (String s: ss) {
if (s.startsWith("push")) {
myQueue.push(Integer.parseInt(s.split(" ")[1]));
} else {
System.out.println(myQueue.pop());
}
}
scanner.close();
}