数据结构java版之《栈和队列》

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32059827/article/details/62050174

1、栈。

(Android的Activity加载是基础栈结构的)

底层使用数组实现

package ch4;
/**
 * 栈
 * @author Howard
 * 特点:
 * 1、通常情况作为程序员的工具集来用
 * 2、受限访问,不可直接拿中间数据
 * 3、更加抽象(主要通过接口定义)
 * 4、表现形式为先进后出
 */
public class MyStack {
    //底层使用数组来存储数据
    private long arr[];

    //栈顶的指针
    private int top;

    /**
     * 默认的构造,创建长度为100的数组
     */
    public MyStack(){
        arr = new long[100];
        top = -1;
    }

    /**
     * 带参构造
     * 创建对象的时候指定数组大小
     * @param maxSize
     */
    public MyStack(int maxSize){
        arr = new long[maxSize];
        //指定为-1原因是,添加数组,保证指针指向第一条数据
        top = -1;
    }

    /**
     * 压栈,添加数据
     * @param value
     */
    public void push(long value){
        //++top保证第一次添加加入到数组第一个位置
        arr[++top] = value;
    }

    /**
     * 出栈,减少数据
     * @return
     */
    public long pop(){
        //top--保证第一次出栈为栈顶最顶端数据
        return arr[top--];
    }

    /**
     * 查看数据,每一次拿出栈顶的数据
     * 底层是数组的最后一条数据
     * @return
     */
    public long peek(){
        return arr[top];
    }

    /**
     * 判断栈是否为空
     * @return
     */
    public boolean isEmpty(){
        //指针指向-1位置,说明数组为空,也就是栈为空
        return top == -1;
    }

    /**
     * 判断数组是否满了
     * @return
     */
    public boolean isFull(){
        //top位于数组的最大值索引时,满栈
        return top == arr.length-1;
    }

}

测试栈:

package ch4;

public class TestMyTask {
    public static void main(String[] args) {
        MyStack myStack = new MyStack(5);
        myStack.push(23);
        myStack.push(13);
        myStack.push(33);
        myStack.push(20);
        myStack.push(27);

        System.out.println(myStack.isEmpty());
        System.out.println(myStack.isFull());

        System.out.println(myStack.peek());
        System.out.println(myStack.peek());

        while(!myStack.isEmpty()){
            System.out.println(myStack.pop());
        }

        System.out.println(myStack.isEmpty());
        System.out.println(myStack.isFull());

    }
}

打印输出:

false

true

27

27

27

20

33

13

23

true

false

2、队列

(Android中的Message是基于队列结构的)

底层使用数组实现


package ch4;
/**
 * 1、先进先出与栈相反
 * 2、通常情况作为程序员的工具集来用
 * @author Howard
 */
public class MyQueue {
    //底层使用数组
    private long[] arr;
    //定义头指针
    private int top;
    //定义尾指针
    private int rear;
    //记录元素个数
    private int elements;
    public MyQueue(int maxSize){
        arr = new long[maxSize];
        top = 0;
        rear = -1;
    }

    /**
     * 增加数据
     * @param value
     */
    public void insert(long value){
        if(rear == arr.length -1){
            //实现循环使用。超过以往值就覆盖原来内容
            rear = -1;
        }
        arr[++rear] = value;
        elements++;
    }

    /**
     * 移除数据,移除的队列最前面的数据
     * @return
     */
    public long remove(){
        if(top == arr.length){
            //实现循环使用。底层top指向了最顶层,让指针再回到数组最开头
            top = 0;
        }
        elements --;
        return arr[top++];
    }

    /**
     * 查看数据,查看的队列头部的数据
     * @return
     */
    public long peek(){
        return arr[top];
    }

    /**
     * 判断是否为空
     * @return
     */
    public boolean isEmpty(){
        return elements == 0;
    }

    /**
     * 是否满了
     * @return
     */
    public boolean isFull(){
        return elements == arr.length;
    }

}

测试队列:

false

true

12

12

12

---------------------

12

32

18

10

2

true

false

现在使用数组实现栈和队列,等学习链表时,再用链表实现之。


猜你喜欢

转载自blog.csdn.net/qq_32059827/article/details/62050174