数据结构7:栈的简单实现

1.创建接口

package myproject.work.stack_demo;

/**
 * 栈的接口
 * @param <T>
 */
public interface Stack<T> {

    /**
     * 栈是否为空
     * @return
     */
    boolean isEmpty();

    /**
     * data元素入栈
     * @param data
     */
    void push(T data);

    /**
     * 返回栈顶元素,未出栈
     * @return
     */
    T peek();

    /**
     * 出栈,返回栈顶元素,同时从栈中移除该元素
     * @return
     */
    T pop();


}


2.创建实现类

package myproject.work.stack_demo;

import java.io.Serializable;

/**
 * 自定义栈的实现方法
 * @param <T>
 */
public class myStack<T> implements Stack<T> ,Serializable{

    public static final long serialVersionUID = -5413303117698554397L;

    /**
     * 栈顶指针  空栈为-1
     *
     */
    private int top=-1;

    /**
     * 栈容量的大小默认为10
     */
    private int capacity=10;

    /**
     * 存放元素的数组
     */
    private T[] array;

    //栈中存放对象的标识
    private int size;


    /**
     * 初始化创建数组
     */
    public myStack() {
        array= (T[]) new Object[capacity];
    }

    /**
     * 传入创建数组数量
     * @param capacity
     */
    public myStack(int capacity) {
        array= (T[]) new Object[capacity];
    }

    /**
     * 获取对象数量
     * @return
     */
    public int size(){

        return size;
    }

    /**
     * 判断栈内数据是否为空
     * @return
     */
    @Override
    public boolean isEmpty() {
        //判断栈顶是否为空
        return this.top==-1;
    }

    /**
     * 从栈顶插入数据      入栈
     * @param data
     */
    @Override
    public void push(T data) {
        //如果对象的个数   大于   开辟空间的容量
        if (size()>array.length){
            ensureCapacity(this.capacity*2+1);
        }

        //从栈顶插入数据
        array[++top]=data;

        //增加size
        size++;


    }

    /**
     * 扩容的方法
     * @param capacity
     */
    public void ensureCapacity(int capacity){
        //如果对象的个数   小于   开辟空间的容量
        if (size<capacity){
            return;//直接返回
        }

        T[] old = this.array;

        //重新扩容
        array= (T[]) new Object[capacity];

        for (int i = 0; i <old.length ; i++) {
            //赋值
            array[i]=old[i];
        }

    }

    /**
     * 获取栈顶元素
     * @return
     */
    @Override
    public T peek() {

        if (isEmpty()){
            throw new RuntimeException("nulpoint");
        }


        //获取栈顶
        return array[top];
    }

    /**
     * 获取栈顶元素  出栈
     * @return
     */
    @Override
    public T pop() {

        if (isEmpty()){
            throw new RuntimeException("nulpoint");
        }

        T t = array[top];

        //直接设置size的长度
        size--;

        //设置栈顶的索引
        top--;
        return t;
    }

    public static void main(String[] args) {
        myStack<Integer> stack=new myStack<>();

        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);


        System.out.println( stack.pop());
        System.out.println( stack.pop());
        System.out.println( stack.pop());
        System.out.println( stack.pop());




    }
}

运行结果

D:\java\jdk\bin\java "-javaagent:E:\idea\IntelliJ IDEA 2017.2.3\lib\idea_rt.jar=51608:E:\idea\IntelliJ IDEA 2017.2.3\bin" -Dfile.encoding=UTF-8 -classpath D:\java\jdk\jre\lib\charsets.jar;D:\java\jdk\jre\lib\deploy.jar;D:\java\jdk\jre\lib\ext\access-bridge-64.jar;D:\java\jdk\jre\lib\ext\cldrdata.jar;D:\java\jdk\jre\lib\ext\dnsns.jar;D:\java\jdk\jre\lib\ext\jaccess.jar;D:\java\jdk\jre\lib\ext\jfxrt.jar;D:\java\jdk\jre\lib\ext\localedata.jar;D:\java\jdk\jre\lib\ext\nashorn.jar;D:\java\jdk\jre\lib\ext\sunec.jar;D:\java\jdk\jre\lib\ext\sunjce_provider.jar;D:\java\jdk\jre\lib\ext\sunmscapi.jar;D:\java\jdk\jre\lib\ext\sunpkcs11.jar;D:\java\jdk\jre\lib\ext\zipfs.jar;D:\java\jdk\jre\lib\javaws.jar;D:\java\jdk\jre\lib\jce.jar;D:\java\jdk\jre\lib\jfr.jar;D:\java\jdk\jre\lib\jfxswt.jar;D:\java\jdk\jre\lib\jsse.jar;D:\java\jdk\jre\lib\management-agent.jar;D:\java\jdk\jre\lib\plugin.jar;D:\java\jdk\jre\lib\resources.jar;D:\java\jdk\jre\lib\rt.jar;C:\java_learn\javaStructures-master\javaStructures-master\out\production\javaStructures myproject.work.stack_demo.myStack
4
3
2
1

Process finished with exit code 0

代码不全只是自己记录学习,借鉴:https://blog.csdn.net/javazejian/article/details/52953190;强烈推荐此大神博客。。。

猜你喜欢

转载自blog.csdn.net/qq_38788128/article/details/80929887