其实栈就是一个先进后出的属性 用一个数组代替这个栈 然后用一个top指示最高的位数 那样就能把一个简单的栈实现了
public class mystack {
private int[] arr;//数组代替栈
private int top;//top代替指针
//构造函数
public mystack(){
arr = new int[10];
top=-1;
}
public mystack(int max){
arr = new int[max];
top=-1;
}
//入栈
public void push(int a){
top=top+1;
arr[top]=a;
}
//出栈
public int pop(){
return arr[top--];
}
public int peek(){
return arr[top];
}
public boolean isempty(){
return top==-1;
}
}
队列类似 用一个数组代替队列 length代表有多少元素 start开始指针 end 最后的指针
代码
public class queue {
private int[] arr;
private int length;
private int start;
private int end;
public queue(){
arr= new int[10];
length=0;
start=0;
end=0;
}
public queue(int value){
arr= new int[value];
length=0;
start=0;
end=-1;
}
//添加元素
public void push(int a){
end++;
arr[end]=a;
length++;
}
//删除元素
public int remove(){
length--;
return arr[start++];
}
//判断队列是不是满了
public boolean isfull(){
return length==arr.length;
}
//查看队头元素
public int peek(){
return arr[start];
}
public boolean isempty(){
return length==0;
}
}
循环队列
如果队列的元素取出去 然后再放进来 上一个代码就会出现问题 因为start 和end只会向后走 等走到数组末尾就会发生数组越界异常 所以我们增加和删除的时候判断一下 如果到数组末尾 就重置一下 那样就成了循环队列
public class queuecy {
private int[] arr;
private int length;
private int start;
private int end;
public queuecy(){
arr= new int[10];
length=0;
start=0;
end=0;
}
public queuecy(int value){
arr= new int[value];
length=0;
start=0;
end=-1;
}
//添加元素
public void push(int a){
if(end==arr.length-1){
end=-1;
}//这里添加了个判断结尾是不是到队列末尾 到了的话重置
end++;
arr[end]=a;
length++;
}
//删除元素
public int remove(){
int value = arr[start++];
if(start==arr.length){
start=0;
//判断是不是到队列的末尾 到了的话就重置
}
length--;
return value;
}
//判断队列是不是满了
public boolean isfull(){
return length==arr.length;
}
//查看队头元素
public int peek(){
return arr[start];
}
public boolean isempty(){
return length==0;
}
}