首页 > 其他分享 >使用数组模拟队列和栈

使用数组模拟队列和栈

时间:2023-09-29 16:22:07浏览次数:36  
标签:队列 System len int add 数组 public 模拟 out

使用数组模拟队列

  • 案例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();  //取完了

    }
}

标签:队列,System,len,int,add,数组,public,模拟,out
From: https://www.cnblogs.com/dogleftover/p/17737074.html

相关文章

  • 模拟链表
    创建节点类publicclassNode{intn;Nodenext;}编写方法publicclassMyLinkList{Nodehead=newNode();privateintlen=0;//获取长度publicintsize(){returnlen;}//添加元素到最后publicvoid......
  • 使用数组模拟集合
    编写方法publicclassMyArrayList{privateint[]n=newint[10];//动态数组privateintsize=0;//长度publicintsize(){returnthis.size;}//添加一个元素publicvoidadd(intelement){n[size]=element;......
  • 向有序数组插入数据,数组依然是有序的
    数组降序的情况下插入数据依然是降序第1次推导publicclasstest{publicstaticvoidmain(String[]args){int[]ints={90,80,70};inttmp=85;//与第1个数比较时//[0][1][2][]if(tmp>ints[0]){/......
  • 数组冒泡排序
    第1次推导publicclasstest{publicstaticvoidmain(String[]args){int[]ints={6,5,9,5};inttmp;if(ints[0]>ints[1]){tmp=ints[0];ints[0]=ints[1];ints[1]=tmp;}......
  • 数组插入排序
    第1次推导publicclasstest{publicstaticvoidmain(String[]args){int[]ints={2,5,3,1,8,9};inttmp;//存储临时变量intj;//开始比较第几位的数//第1次//2,5,3,1,8,9j=1;//比较索引1的数......
  • 浅谈数据结构栈与队列
    栈1.栈的基本概念栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。不能插入和删除的一端为栈底(Bottom)栈顶(top):线性表允许进行插入删除的那一端栈底(bottom):固定的,不允许进行插入和删除的那一端空栈:不含任何元素的......
  • 恩尼格玛机模拟动图
    打开恩尼格玛机模拟动图网站,可直接查看对应动图效果,具体操作如下:再次点击Encrypt后Output栏会和上次的不同..其他实际项参考下图,具体各项释义可查Enigma运行原理......
  • 模拟集成电路设计系列博客——2.2.1 折叠Cascode放大器的基本结构
    2.2.1折叠Cascode放大器的基本结构许多现代CMOS集成电路放大器设计仅用于驱动容性负载。由于驱动的是容性负载,放大器并不需要通过一个电压缓冲器来获得较低的输出阻抗。因此相比那些必须要驱动阻性负载的放大器,更可能获得更快的速度和更大的信号摆幅。而这些增长仅仅需要通过在......
  • [LeetCode] 2251. 花期内花的数目 - 二分查找/有序数组
    Problem:2251.花期内花的数目思路看题目应该是一道比较经典的差分,本来准备拿差分数组做的,后来搂了一眼题解,发现用二分的方法更简单解题方法此题有一种很简便的方法,第i个人到达时间为people[i],所以我们不难找到在这个时间之前花期已经开始的花的数量,即v1=start<=people[i]......
  • FX3U-3A-ADP模拟量和数字量之间转换
    简单的例子:0-10V对应0-8,4-20mA对应0-30 以下是对上面例子的详解:电压:  电压(0-10V)0-10V对应着数字量0-4000数字量与变频器HZ量之间的关系是(4000-0)/(50-0)=80故如果你想转多少HZ数,就需要在后面(乘上80),这个才是你HZ数对应的数字量 注意:如果设置了M8262ON是电流输出......