用数组实现大小固定的队列和栈
1、用数组实现大小固定的栈
public class ArrayStack{
private Integer[] arr;
public Integer index;
public ArrayStack(int initSize) {
if(initSize<0) {
throw new IllegalArgumentException("The init size is less than 0");
}
arr=new Integer[initSize];
index=0;
}
//取栈顶元素
public Integer peek() {
if(index==0)
return null;
return arr[index-1];
}
//压栈
public void push(int obj) {
if(index==arr.length){
throw new ArrayIndexOutOfBoundsException("The stack is full");
}
arr[index++]=obj;
}
//弹栈顶元素
public Integer pop() {
if(index==0) {
throw new ArrayIndexOutOfBoundsException("The stack is empty");
}
return arr[--index];
}
public static void main(String[] args) {
ArrayStack t=new ArrayStack(7);
t.push(1);
t.push(3);
t.push(5);
t.push(7);
System.out.println(t.peek());
System.out.println(t.pop());
}
}
输出:
7
7
2、用数组实现大小固定的队列
public class ArrayQueue{
private Integer[] arr;
public Integer size;
public Integer start;
public Integer end;
public ArrayQueue(int initSize) {
if(initSize<0) {
throw new IllegalArgumentException("The init size is less than 0");
}
arr=new Integer[initSize];
size=0;
start=0;
end=0;
}
public Integer peek() {
if(size==0)
return null;
return arr[start];
}
public void push(int obj) {
if(size==arr.length) {
throw new ArrayIndexOutOfBoundsException("The queue is full");
}
size++;
arr[end]=obj;
end=end==arr.length-1?0:end+1;
}
public Integer poll() {
if(size==0) {
throw new ArrayIndexOutOfBoundsException("The queue is empty");
}
size--;
int tmp=start;
start=start==arr.length-1?0:start+1;
return arr[tmp];
}
public static void main(String[] args) {
ArrayQueue t=new ArrayQueue(7);
t.push(1);
t.push(3);
t.push(5);
t.push(7);
System.out.println(t.poll());
System.out.println(t.peek());
System.out.println(t.poll());
System.out.println(t.peek());
}
}
输出:
1
3
3
5