zoukankan      html  css  js  c++  java
  • 数据结构学习--Java栈和队列

    栈:先进后出

    队列:先进先出

    都是数组存放,但是删除的时候不是删除了数组中的数据,而是使用增加游标标识的方式实现删除,“游标标识”加加或者减减完成删除操作,查看的时候,也不是直接查看栈和队列的数组元素,而是使用游标的方式向外查看。

    栈的实现

    package com.example.deer;

    public class MyStack {
    private long[] arr;
    private int top;

    /**
    * 默认构造函数
    */
    public MyStack(){
    arr = new long[10];
    top = -1;
    }

    /**
    * 带参数构造函数
    * @param maxsize
    */
    public MyStack(int maxsize){
    arr = new long[maxsize];
    top = -1;
    }

    /**
    * 新增数据
    * @param value
    */
    public void push(int value){
    arr[++top] = value;
    }

    /**
    * 移除数据
    * @return
    */
    public long pop(){
    return arr[top--];
    }

    /**
    * 查看数据
    * @return
    */
    public long peek(){
    return arr[top];
    }

    /**
    * 判断是否为空
    * @return
    */
    public boolean isEmpty(){
    return top == -1;
    }

    /**
    * 判断是否满了
    * @return
    */
    public boolean isFull(){
    return top == arr.length - 1;
    }
    }
    队列的实现
    package com.example.deer;

    public class MyQueue {
    //底层使用数组
    private long[] arr;
    //有效数据大小
    private int elements;
    //队头
    private int front;
    //队尾
    private int end;

    /**
    * 默认构造方法
    */
    public MyQueue(){
    arr = new long[10];
    elements = 0;
    front = 0;
    end = -1;
    }

    /**
    * 带参数的构造方法,参数为数组大小
    * @param maxsize
    */
    public MyQueue(int maxsize){
    arr = new long[maxsize];
    elements = 0;
    front = 0;
    end = -1;
    }
    /**
    * 添加数据,从队尾插入
    */
    public void insert(long value){
    arr[++end] = value;
    elements ++;
    }
    /**
    * 删除数据,从队头删除
    */
    public long remove(){
         elements -- ;
            return arr[front++];
    }
    /**
    * 查看数据,从队头查看
    */
    public long peek(){
    return arr[front];
    }
    /**
    * 判断是否为空
    */
    public boolean isEmpty(){
    return elements == 0;
    }
    /**
    * 判断是否满了
    */
    public boolean isFull(){
    return elements == arr.length;
    }
    }
    循环队列主要解决的问题是:队列一旦存满了或者删的超过队列长度,将会出现角标越界的问题。
    循环队列实现
    package com.example.deer;

    public class MyQueue {
    //底层使用数组
    private long[] arr;
    //有效数据大小
    private int elements;
    //队头
    private int front;
    //队尾
    private int end;

    /**
    * 默认构造方法
    */
    public MyQueue(){
    arr = new long[10];
    elements = 0;
    front = 0;
    end = -1;
    }

    /**
    * 带参数的构造方法,参数为数组大小
    * @param maxsize
    */
    public MyQueue(int maxsize){
    arr = new long[maxsize];
    elements = 0;
    front = 0;
    end = -1;
    }
    /**
    * 添加数据,从队尾插入
    */
    public void insert(long value){
    if(end == arr.length - 1 ){
    end = -1;
    }
    arr[++end] = value;
    elements ++;
    }
    /**
    * 删除数据,从队头删除
    */
    public long remove(){
    long value = arr[front++];
    if(front == arr.length){
    front = 0;
    }
    elements -- ;
    return value;
    }
    /**
    * 查看数据,从队头查看
    */
    public long peek(){
    return arr[front];
    }
    /**
    * 判断是否为空
    */
    public boolean isEmpty(){
    return elements == 0;
    }
    /**
    * 判断是否满了
    */
    public boolean isFull(){
    return elements == arr.length;
    }
    }
  • 相关阅读:
    IntelliJ IDEA 2019.3 安装+永久破解[Windows]
    word2016中如何实现类似目录样式的虚线对齐效果,可用于制作checklist
    测绘地图资源不够用?教你个万能图源制作方法
    真实评测:全球卫星地图哪个最清晰?
    【地图导航】3D地图软件是如何做路径规划的?为什么准确率这么高
    国产良心极简版地图软件,地图下载很丝滑,界面简洁无广告
    推荐几款实用性强的外业勘察地图软件
    重要通知!奥维地图被紧急下架,还有什么地图软件能用呢?
    单片机平台环境
    关于最近登陆需要验证手机
  • 原文地址:https://www.cnblogs.com/xiaohualu/p/11775708.html
Copyright © 2011-2022 走看看