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
    
  • 相关阅读:
    vscode 编写调试autojs
    auto打印调试
    AutoJS 初级操作代码
    转 【海豚教程】用Visual Studio开发安卓应用
    转 android sdk创建AVD时如何更改AVD的存储路径
    安装 Mono for Android for Visual Studio 2010
    转 C# ToolStrip浮动及上/下/左/右 停靠
    关于t328w root后哪些能删除哪些不能删除
    Windows 7 添加 loopback adapter
    如何在vs中创建安装程序
  • 原文地址:https://www.cnblogs.com/Zombie-Xian/p/6524157.html
Copyright © 2011-2022 走看看