zoukankan      html  css  js  c++  java
  • 应用小练习-自定义栈

    应用小练习-自定义栈

    特点

    1. 先进后出,后进先出

    重点

    1. 泛型类/接口是泛型,实现的类也是泛型

    2. 数组定义为Object类型,用时在强转(E)object

    3. 默认的栈内数据长度-初始栈顶为-1;

    4. 对于取出元素,先取值,在改变栈内数据长达

    5. 泛型字母不可new;

    方法

    1. 入栈 2. 出栈 3. 查看栈顶元素 4. 判断是否空栈 5. 判断是否满栈

    1. 返回栈内数据个数 7. 返回栈的存储长达 8. 查看某个元素 9.打印栈内元素

    具体代码

    1. 接口

    package com.fr.stackText;
    ​
    public interface IStack<E> {
        /**
         * 入栈
         * 
         * @param e
         *            传入的对象
         * @return 返回入栈是否成功
         */
        public boolean inStack(E e);
    ​
        /**
         * 出栈
         * 
         * @return 返回的元素
         */
        public E outStack();
    ​
        /**
         * 查看栈顶元素
         * 
         * @return 栈顶的元素
         */
        public E topStack();
    ​
        /**
         * 判断是否为空栈
         * 
         * @return 空栈返回true,否则返回false
         */
        public boolean isEmpty();
    ​
        /**
         * 判断是否满栈
         * 
         * @return 满栈返回true,否则返回false
         */
        public boolean isMax();
    ​
        /**
         * 返回栈的内容长度
         * 
         * @return 返回栈的内容长度
         */
        public int size();
    ​
        /**
         * 返回栈的长度
         * 
         * @return 长度值
         */
        public int getStackSize();
    ​
        /**
         * 打印
         */
        public void display();
    }
    1. 实现

    public class MyStack<E> implements IStack<E> {
    
        private Object[] obj;
        private int stackLength;
        private int stackSize;
        private final static int DEFAULT_SIZE = 10;
    
        public MyStack() {
            this.stackLength = DEFAULT_SIZE;
            this.obj = new Object[DEFAULT_SIZE];
            this.stackSize = -1;
        }
    
        public MyStack(int stackLength) {
            if (stackLength <= 0)
                stackLength = DEFAULT_SIZE;
            this.stackLength = stackLength;
            this.obj = new Object[stackLength];
            this.stackSize = -1;
        }
    
        @Override
        public boolean inStack(E e) {
            if (isMax()) {
                // throw new ArrayIndexOutOfBoundsException(stackSize);
                return false;
            }
            stackSize++;
            obj[stackSize] = e;
            return true;
        }
    
        @Override
        public E outStack() {
            if (isEmpty()) {
                return null;
            } else {
                E e = (E) obj[stackSize];
                stackSize--;
                return e;
            }
        }
    
        @Override
        public E topStack() {
            if (isEmpty()) {
                return null;
            } else {
                return (E) obj[stackSize];
            }
        }
    
        @Override
        public boolean isEmpty() {
            return this.stackSize == -1 ? true : false;
        }
    
        @Override
        public boolean isMax() {
            return this.stackSize >= this.stackLength ? true : false;
        }
    
        @Override
        public int size() {
            return stackSize + 1;
        }
    
        @Override
        public int getStackSize() {
            return stackLength;
        }
    
        @Override
        public void display() {
            if (isEmpty()) {
                System.out.println("该栈中没有元素");
            } else {
                for (int i = 0; i <= this.stackSize; i++) {
                    System.out.println(this.obj[i]);
                }
            }
    
        }
    
    }
     
  • 相关阅读:
    [linux]Linux下的log
    [WDT]内部看门狗和外部看门狗
    [misc]printf/fprintf/sprintf/snprintf函数
    [Linux]read/write和fread/fwrite有什么区别
    移动端图片操作(二)——预览、旋转、合成
    移动端图片操作(一)——上传
    实现tap的多种方式
    Hammer.js分析(四)——recognizer.js
    Hammer.js分析(三)——input.js
    Hammer.js分析(二)——manager.js
  • 原文地址:https://www.cnblogs.com/-Archenemy-/p/12012943.html
Copyright © 2011-2022 走看看