1.用数组结构实现大小固定的栈
分析:栈是先进后出的结构,存进去的是12345,那么弹出的要是54321.
思路:1.创建一个数组,数组的长度是固定的(用来实现大小固定的栈);2.要有一个指针(指向的是数组的第一个空位置),用来指示数据进栈的下标位置,同时指示数据出栈的下标位置。
class ArrayStack(){
private int[] arr;
int index;
//1.初始化:创建好空数组,指针指向0位置
public ArrayStack(int initSize){
if(initSize<=0){
throw new IllegalArgumentException("栈的初始尺寸不能小于等于0");
}
arr=new int[initSize];
index=0;
}
//2.进栈操作
public void push(int i){
if(index==arr.length){
throw new ArrayIndexOutOfBoundsException("栈满员啦");
}
arr[index++]=i;
}
//3.出栈操作
public int pop(){
if(index==0){
throw new ArrayIndexOutOfBoundsException("栈是空的,弹不出元素");
}
return arr[--index];
}
//4.弹出栈顶元素(数组中保留这个元素)
public int peek(){
if(index==0){
throw new ArrayIndexOutOfBoundsException("栈是空的,栈顶弹不出元素");
}
return arr[index-1];
}
}
2.用数组结构实现大小固定的队列
分析:队列是先进先出的结构,存进去的是12345,那么弹出的要是12345.
思路:1.创建一个数组,数组的长度是固定的(用来实现大小固定的队列);2.要有三个指针,第一个指针表示的是可以添加元素的第一个空位置end,第二个指针表示的是第一个输出的元素的位置start,第三个指针表示的是已经填充数据的数组的尺寸size
class ArrayQueue{
private int[] arr;
int start;
int end;
int size;
//1.构造函数初始化数组和各个变量
public ArrayQueue(int initSize){
if (initSize<0) {
throw new IllegalArgumentException("初始尺寸小于0");
}
arr=new int[initSize];
start=0;
end=0;
size=0;
}
//2.添加元素到末尾
public void push(int i){
if(size==arr.length){
throw new ArrayIndexOutOfBoundsException("数组满员,不能在添加了");
}
size++;
int[end]=i;
end=end==arr.length-1?0:end+1;//判断尾指针是不是在末尾,如果是的话,他的下一个位置就到了0位置(数组循环使用)
}
//3.从头部输出元素
public int poll(){
if(size==0){
throw new ArrayIndexOutOfBoundsException("数组为空,不能输出元素");
}
size--;
int temp=start;
start=start==arr.length-1?0:start+1;
return arr[temp];
}
//4.输出第一个元素(数组中保留这个元素)
public int peek(){
if(size==0){
throw new ArrayIndexOutOfBoundsException("数组为空,不能输出第一个元素");
}
return arr[start];
}
}