栈:
用一个变量index表示下一次压栈应该压到哪里.
class ArrayStack {
private int [] stack ;
private int index = 0;
public ArrayStack(int size){
if (size < 0) {
throw new IllegalArgumentException("The init size is less than 0");
}
stack = new int [size];
}
public int peek(){
if (index == 0){
throw new RuntimeException("stack is empty");
}
return stack[index];
}
public void push(int i){
if (index == stack.length - 1){
throw new RuntimeException("stack is full");
}
stack[index ++ ] = i;
}
public int pop(int i){
if (index == 0){
throw new RuntimeException("stack is empty");
}
return stack[index --];
}
}
队列:
用三个变量帮助实现.start/end/size
end用来指向下一次应该存入元素的位置
start用来指向下一次应该取出元素的位置
size用来约束队列的大小.end和start的每次变化对size都有影响但start和end两者之间没有影响.
public class ArrayQueue {
private int [] queue;
private int start;
private int end;
private int size;
public ArrayQueue(int size){
if (size <= 0){
throw new RuntimeException("size is not correct");
}
queue = new int [size];
start = 0;
end = 0;
size = 0;
}
public Integer peek(){
if (size == 0){
return null;
}
return queue[start];
}
public void push(int i){
if (size >= queue.length){
throw new RuntimeException("queue is full");
}
queue[end] = i;
end = ++end % queue.length;
size ++;
}
public Integer poll(){
if (size <= 0){
throw new RuntimeException("queue is empty");
}
int res = start;
start = ++ start % queue.length;
return queue[res];
}
}