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;
    }
    }
  • 相关阅读:
    题目:返回一个整数数组中最大子数组的和。(要求程序必须能处理1000 个元素)
    四则运算三(接受用户输入答案,并判断对错。)
    二维数组
    结对开发(一位数组)
    测试四则运算
    四则运算2
    程序设计思路
    项目计划总结
    小学二年级题目的改进
    二年级题目的改进
  • 原文地址:https://www.cnblogs.com/xiaohualu/p/11775708.html
Copyright © 2011-2022 走看看