跟小刀学习 java 数据结构 栈和队列的实现

来源:互联网 发布:鬼畜软件 编辑:程序博客网 时间:2024/04/30 14:06
  • java 数据结构 列和栈的实现
  • 栈的原理 先进后出 先进入的放在最下面后进入的在最上面,拿的时候从最上面拿 这就是栈的原理
    这里写图片描述
代码如下:public class MyStack {    //底层实现是一个数组    private long[] arr;    private int top;//表示栈顶    /**     * 默认的构造方法     */    public MyStack() {        arr = new long[10];        top = -1;    }    /**     * 带参数构造方法,参数为数组初始化大小     */    public MyStack(int maxsize) {        arr = new long[maxsize];        top = -1;    }    /**     * 添加数据     */    public void push(int value) {        arr[++top] = value;    }    /**     * 移除数据     */    public long pop() {        return arr[top--];    }    /**     * 查看数据     */    public long peek() {        return arr[top];    }    /**     * 判断是否为空     */    public boolean isEmpty() {        return top == -1;    }    /**     * 判断是否满了     */    public boolean isFull() {        return top == arr.length - 1;    }}测试代码:public static void main(String[] args) {        MyStack ms = new MyStack(4);        ms.push(23);        ms.push(12);        ms.push(1);        ms.push(90);        System.out.println(ms.isEmpty());        System.out.println(ms.isFull());        System.out.println(ms.peek());        while(!ms.isEmpty()) {            System.out.print(ms.pop() + ",");        }        System.out.println();        System.out.println(ms.isEmpty());        System.out.println(ms.isFull());    }

队列的原理:先进先出,后进后出 ,就比如你去火车站买票,第一人排队的肯定是他先买完走了。排在最后的肯定是最后走
这里写图片描述

代码如下:/* * 列队类 */public class MyCycleQueue {    //底层使用数组    private long[] arr;    //有效数据的大小    private int elements;    //队头    private int front;    //队尾    private int end;    /**     * 默认构造方法     */    public MyCycleQueue() {        arr = new long[10];        elements = 0;        front = 0;        end = -1;    }    /**     * 带参数的构造方法,参数为数组的大小     */    public MyCycleQueue(int maxsize) {        arr = new long[maxsize];        elements = 0;        front = 0;        end = -1;    }    /**     * 添加数据,从队尾插入     */    public void insert(long value) {        if(end == arr.length - 1) {// 如果添加的数据满了。就重新开始添加让end=-1            end = -1;        }        arr[++end] = value;        elements++;    }    /**     * 删除数据,从队头删除     */    public long remove() {        long value = arr[front++];//每次取一个数据        if(front == arr.length) {//如果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;    }}测试代码:public static void main(String[] args) {        MyCycleQueue mq = new MyCycleQueue(4);        mq.insert(23);        mq.insert(45);        mq.insert(13);        mq.insert(1);        System.out.println(mq.isFull());        System.out.println(mq.isEmpty());        System.out.println(mq.peek());        System.out.println(mq.peek());        while (!mq.isEmpty()) {            System.out.print(mq.remove() + " ");        }        System.out.println();        mq.insert(23);        mq.insert(45);        mq.insert(13);        mq.insert(1);        while (!mq.isEmpty()) {            System.out.print(mq.remove() + " ");        }    }

数据结构总是那么难。今天先写俩个比较简单的,后续我还会继续发表博客,第一写会有不对的地方还请大家多多指教。

3 0