Java中的栈和队列的代码实现

其实栈就是一个先进后出的属性 用一个数组代替这个栈 然后用一个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;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值