Android实现队列出入队测试

演示效果:

安卓队列测试

入队操作

空队,满队判断

队列实现代码:

java 复制代码
package com.example.generalqueue;

import android.content.Context;
import android.widget.Toast;

import java.util.Arrays;

public class ArrayQueue {
    private int capacity;//队列容量
    private int front;//队头
    private int rear;//队尾
    private int[] queue_data;//队列容器
    private final Context _context;

    //构造
    public ArrayQueue(Context _ctx){
        _context=_ctx;
        capacity=100;//默认队列大小
        initQueue();//初始化队列
    }

    //构造
    public ArrayQueue(int queue_capacity, Context _ctx){
        _context=_ctx;
        capacity = queue_capacity;
        initQueue();//初始化队列
    }

    //初始化队列
    private void initQueue(){
        queue_data = new int[capacity];//初始化队列容器
        front=-1;//初始化队头
        rear=-1;//初始化队尾
    }

    //清空队列
    public void clean(){
        Arrays.fill(queue_data,0);//重置数组
        front=-1;//初始化队头
        rear=-1;//初始化队尾
    }

    //队列容量
    public int Capacity(){
        return capacity;
    }

    //队列当前大小
    public int Count(){
        return rear-front;
    }

    //满队
    public boolean isFull() {
           return rear==capacity-1;
    };

    //空队
    public boolean isEmpty(){
        return front==rear;
    }

    //获取队头
    public int getFront(){
        return front;
    }

    //获取队尾
    public int getRear()
    {
        return rear;
    }

    //入队
    public void enqueue(int data){
        if (isFull()){
            System.out.println("队列已满");
            Toast.makeText(_context,"队列已满",Toast.LENGTH_LONG).show();
        }else{
            rear++;
            queue_data[rear]=data;
            System.out.println("入队:"+queue_data[rear]);
        }
    }

    //出队
    public int dequeue(){
        if (isEmpty()){
            System.out.println("队列为空,无法出队");
            Toast.makeText(_context,"队列为空,无法出队",Toast.LENGTH_LONG).show();
            return -1;
        }else {
            front++;
            int data = queue_data[front];
            System.out.println("<<<出队: "+data);
            queue_data[front]=0;
            adjustQueue();
            return data;
        }
    }

    //出队后重新调整队列
    private void adjustQueue(){
        int len = rear-front;
        int[] tmpQueue = new int[len];
        System.arraycopy(queue_data,front+1,tmpQueue,0,len);
        Arrays.fill(queue_data,0);
        System.arraycopy(tmpQueue,0,queue_data,0,len);
        front--;
        rear--;
        System.out.println("<<<成功调整队列: front:"+front+"rear: "+rear);
    }

}

源码github地址:

bash 复制代码
https://github.com/tonyimax/GeneralQueue.git
相关推荐
2501_915918412 小时前
uni-app 项目 iOS 上架踩坑经验总结 从证书到审核的避坑指南
android·ios·小程序·https·uni-app·iphone·webview
游戏开发爱好者82 小时前
iOS 上架 uni-app 流程全解析,从打包到发布的完整实践
android·ios·小程序·https·uni-app·iphone·webview
雨白7 小时前
实现双向滑动的 ScalableImageView(上)
android
Y4090017 小时前
数据库基础知识——聚合函数、分组查询
android·数据库
没有了遇见12 小时前
Android 原生定位(替代高德 / 百度等三方定位)<终极版本>
android
2501_9160088913 小时前
iOS 抓包工具有哪些?全面盘点主流工具与功能对比分析
android·ios·小程序·https·uni-app·iphone·webview
2501_9159214313 小时前
iOS混淆工具实战 视频流媒体类 App 的版权与播放安全保护
android·ios·小程序·https·uni-app·iphone·webview
CYRUS_STUDIO14 小时前
LLVM 全面解析:NDK 为什么离不开它?如何亲手编译调试 clang
android·编译器·llvm
CYRUS_STUDIO14 小时前
静态分析神器 + 动态调试利器:IDA Pro × Frida 混合调试实战
android·逆向
g_i_a_o_giao16 小时前
Android8 binder源码学习分析笔记(一)
android·java·笔记·学习·binder·安卓源码分析