展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

使用数组模拟队列和栈

使用数组模拟队列

  • 案例1
public class Queue {

    private int[] num= new int[5];

    private int len=0;

    public int size(){
        return this.len;
    }

    //添加
    public int add(int n){
        if (len<num.length){
            num[len]=n;
            len++;
            return len;
        }else {
            return -1; // 满了
        }
    }

    //获取
    public int get(){
        if (len>0){
            int n=num[0];
            // 取出第一个后,往前移动
            for (int i = 0; i < len-1; i++) {
                num[i]=num[i+1];
            }
            len--;
            return n;
        }else {
            return -1; // 取完了
        }
    }

}
  • 测试
public class test {
    public static void main(String[] args) {
        Queue q=new Queue();
        // 添加
        q.add(10);
        q.add(20);
        q.add(30);
        q.add(40);
        q.add(50);

        // 输出长度
        System.out.println(q.size());

        // 遍历
        while (q.size()>0){
            System.out.println(q.get());
        }

        // 超出长度
        q.add(10);
        q.add(20);
        q.add(30);
        q.add(40);
        int a = q.add(50);
        int a1 = q.add(60);
        System.out.println(q.size() + "," + a + "," + a1);

        // 取完后
        while (q.size()>0){
            System.out.println(q.get());
        }
        System.out.println(q.get()); // 取完

    }
}
  • 案例2
public class Que {

    private int[] num= new int[3];

    // 头指针
    private int head=-1;

    // 尾指针
    private int end=-1;

    // 已加入后的个数
    private int len=0;

    public int size(){
        return this.len;
    }

    // 添加
    public int add(int n){
        if (len==num.length){
            System.out.println("队列已加满");
            return -1;
        }else{
            end++;
            if(end>=num.length-1){  // [][][3],尾指针指向下标2时
                end=0;
            }
            num[end]=n; // 尾指针先++,再添加
            len++;
            return len;
        }
    }

    //获取
    public int get(){
        if (len==0){
            System.out.println("队列已取完");
            return -1;
        }else{
            head++;
            if(head>=num.length-1){  // [1][2][],头指针指向下标2时
                head=0;
            }
            int n = num[head];  // 头指针先++,再取值
            len--;
            return n;
        }
    }

}
  • 测试
public class test {
    public static void main(String[] args) {
        //[][][]
        Que que=new Que();
        que.add(10);
        que.add(20);
        que.add(30);
        int q = que.add(40); // 满了
        System.out.println(q);

        que.get();
        que.get();
        int q1 = que.add(40); // 取2个后再加
        System.out.println(q1);

        que.get();
        que.get(); // 取完了
        int q2 = que.get();
        System.out.println(q2);

    }
}

使用数组模拟栈

  • 案例1
public class Zan {

    int i=5;  // 数组长度为5

    private int[] num= new int[i];

    private int len=0;

    public int size(){
        return this.len;
    }

    //添加
    public void add(int n){
        if(len<num.length){ //[1][2][3][4][]
            for(int i=len; i>0; i--){
                num[i]=num[i-1];
            }
            num[0]=n;
            len++;
        }else if(len==num.length){
            System.out.println("已经满了");
        }
    }

    // 获取
    public int get(){
        if(len==0){
            System.out.println("取完了");
            return -1;
        }else{
            int n=num[0];
            for(int i=0; i<len-1; i++){ //[1][2][3][4][]
                num[i]=num[i+1];
            }
            len--;
            return n;
        }
    }

}
  • 测试
public class test3 {
    public static void main(String[] args) {
        Zan zan=new Zan();
        zan.add(10);
        zan.add(20);
        zan.add(30);
        zan.add(40);
        zan.add(50);
        System.out.println(zan.size());
        zan.add(60);  // 满了

        int len = zan.size();
        for (int i = 0; i < len; i++) {
            System.out.print(zan.get() + ",");
        }
        System.out.println();
        System.out.println(zan.size());
        zan.get();  //取完了

    }
}
posted @ 2023-09-29 16:13  DogLeftover  阅读(3)  评论(0编辑  收藏  举报