zoukankan      html  css  js  c++  java
  • Java 数组实现 stack

     首先定义 IStack

    package cn.com.example.stack;
    
    /**
     * Created by Jack on 2017/3/8.
     */
    public interface IStack<T> {
    
        //元素出栈,并返回出栈元素
        public T pop() throws IllegalAccessException;
    
        //元素入栈
        public void push(T element);
    
        //获取栈顶元素
        public T peek() throws IllegalAccessException;
    
        //判断栈是否为空
        public boolean isEmpty();
    
        // 栈大小
        public int size();
    
        public void clear();
    }
    

    接着定义 MyStack 实现 IStack接口  并测试

    package cn.com.example.stack;
    
    import java.util.Arrays;
    
    /**
     * Created by Jack on 2017/3/8.
     */
    public class MyStack<T> implements IStack {
    
        private final int DEFAULT_SIZE = 3;
        private int size = 0;
        private int capacity = 0;
    
        //top指向下一个能够添加元素的位置
        private int top = 0;
        private Object[] array;
    
        public MyStack() {
            this.capacity = this.DEFAULT_SIZE;
            this.array = new Object[this.capacity];
            this.size = 0;
        }
    
        public MyStack(int capacity) {
            this.capacity = capacity;
            this.array = new Object[this.capacity];
            this.size = 0;
        }
    
    
        /**
         * 元素出栈,并返回出栈元素
         *
         * @return
         */
        @Override
        public Object pop() throws IllegalAccessException {
            if (this.size == 0)
                throw new IllegalAccessException("stack element empty");
            T element = (T) this.array[top - 1];
            this.array[top - 1] = null;
            this.size--;
            this.top--;
            return element;
        }
    
        /**
         * 元素入栈
         *
         * @param element
         */
        @Override
        public void push(Object element) {
            if (this.size < this.capacity) {
                this.array[this.top] = element;
                this.top++;
                this.size++;
            } else {
                // 扩容
                enlarge();
                push(element);
            }
        }
    
        private void enlarge() {
            this.capacity = this.capacity + this.DEFAULT_SIZE;
            Object[] newArray = new Object[this.capacity];
            System.arraycopy(array, 0, newArray, 0, array.length);
            Arrays.fill(array, null);
            this.array = newArray;
        }
    
        /**
         * 获取栈顶元素
         *
         * @return
         */
        @Override
        public Object peek() throws IllegalAccessException {
            if (this.size == 0)
                throw new IllegalAccessException("stack element empty");
            return this.array[this.top - 1];
        }
    
        /**
         * 判断栈是否为空
         *
         * @return
         */
        @Override
        public boolean isEmpty() {
            return size == 0;
        }
    
        /**
         * 获取栈大小
         *
         * @return
         */
        @Override
        public int size() {
            return size;
        }
    
        /**
         * 清空 栈
         */
        @Override
        public void clear() {
            Arrays.fill(array, null);
            this.capacity = this.DEFAULT_SIZE;
            this.array = new Object[this.capacity];
            this.size = 0;
            this.top = 0;
        }
    }
    
    class MyStackTest {
        public static void main(String[] args) throws IllegalAccessException {
            MyStack<String> stack = new MyStack<String>();
    
            stack.push("1");
    
            // 栈头
            System.out.println(stack.peek());
    
            // 栈头出栈
            System.out.println(stack.pop());
    
            // 是否为空
            System.out.println(stack.isEmpty());
    
            System.out.println(stack.size());
    
            for (int i = 1; i <= 10; i++) {
                stack.push("" + i);
            }
    
            System.out.println(stack.size());
    
            for (int i = 0; i < 10; i++) {
                String s = (String) stack.pop();
                System.out.println(s);
            }
    
            // 清空
            //stack.clear();
    
            System.out.println("size = " + stack.size());
        }
    }
    

    输出

    1
    1
    true
    0
    10
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    size = 0
    
  • 相关阅读:
    Eclipse快捷键
    vs2010有哪些快捷键
    游戏引擎列表
    移动设备开发推荐网站(J2ME开发)
    Python入门学习资料推荐
    C#中常用的几种读取XML文件的方法
    Springboot整合RabbitMq
    JAVA获取上下行网速
    java jar 指定logback.xml、application.yaml
    在CentOS7系统安装与配置RabbitMQ
  • 原文地址:https://www.cnblogs.com/Zombie-Xian/p/6524157.html
Copyright © 2011-2022 走看看