zoukankan      html  css  js  c++  java
  • 数据结构

    import java.util.Arrays;
    
    // 案例:NBA球员上场5(主力)+3(替补)。安排一个上场球员的存储
    public class FootBallPlayerDemo {
        // 存储场上球员的球员号码
        private static Integer[] elements;
        // 表示场上有几个球员
        private static int size = 0;
    
        // 1):设置初始量(可以存储多少个球员.)
        static void init(int capacity) {
            if (capacity < 0) {
                throw new RuntimeException("初始量不能小于0");
            }
            elements = new Integer[capacity];
        }
    
        // 2):安排五个球员上场(11,22,33,44,55).
        static void add(Integer playerNum) {
            //判断当前size和capacity大小关系
            if (size>=elements.length) {
                // 扩容:原始初始容量*2
                int newCapacity = elements.length * 2;
                // Integer[] newElements = new Integer[newCapacity];
                // 把原始数组中的数据拷贝到新数组中,返回的是新数组
                Integer[] newElements = Arrays.copyOf(elements,newCapacity);
                elements = newElements;
            }
            //===========================
            elements[size] = playerNum;
            size++;
        }
    
        // 3):查询指定球员所在的位置(比如,44球员的位置就是3.).
        static int getIndexByPlayerNum(Integer playerNum) {
            for (int i = 0; i < size; i++) {
                if (playerNum.equals(elements[i])) {
                    return i;
                }
            }
            throw new RuntimeException("没有该编号的球员");
        }
    
        // 4):查询指定位置是哪一个球员(比如,位置为2的球员是33.).
        static Integer get(int index) {
            if (index < 0 || index >= size) {
                throw new RuntimeException("索引越界!!!");
            }
            return elements[index];
        }
    
        // 5):从上场球员中,移除指定球衣号的一个球员.
        static void remove(Integer playerNum) {
            // 找到当前被移除球员所在的位置
            int index = getIndexByPlayerNum(playerNum);
            // 把index之后的元素,整体向前移动一位
            for (int i = index; i < size - 1; i++) {
                elements[i] = elements[i + 1];
            }
            elements[size - 1] = null;
            size--;
        }
    
        // 6):把指定位置的球员换成另一个球员.
        static void set(int index, Integer newPlatNum) {
            if (index < 0 || index >= size) {
                throw new RuntimeException("索引越界!!!");
            }
            elements[index] = newPlatNum;
        }
    
        // 7):打印出场上的球衣号码(比如:[11,22,33,44,55]).
        static void print() {
            StringBuilder sb = new StringBuilder();
            sb.append("[");
            for (int i = 0; i < size; i++) {
                sb.append(elements[i]);
                if (i != size - 1) {
                    sb.append(",");
                }
            }
            sb.append("]");
            System.out.println(sb);
        }
    
        public static void main(String[] args) {
            // 设置场上的球员初始量为6
            init(11);
            // 安排5个球员上场
            add(11);
            add(22);
            add(33);
            add(44);
            add(55);
            add(66);
            // 打印场上球员
            print();
            // 查询33号球员的位置
            System.out.println(getIndexByPlayerNum(33));
            // 位置为2的球员是?
            System.out.println(get(2));
            print();
            // 把4位置的球员换成77号
            set(4,77);
            print();
            // 把33号球员罚下场,不能替换
            // 罚下之前:[11,22,33,44,77]
            remove(33);
            // 罚下之后:[11,22,44,77]
            print();
        }
    }

    BasketBall

    public class BasketBallDemo {
        public static void main(String[] args) {
            //创建一个列表对象
            MyArrayList list = new MyArrayList(5);
            list.add(11);
            list.add(22);
            list.add(33);
            list.add(44);
            list.add(55);
            list.add("55");
            list.add(true);
            System.out.println(list);
            System.out.println("------------------");
            System.out.println(list.size());
            System.out.println(list.isEmpty());
            list.clear(); // 清空
            System.out.println(list);
        }
    }

    ArrayList

    import java.util.Arrays;
    
    // 数组的列表
    public class MyArrayList {
        // 存储场上球员的球员号码
        private static Object[] elements;
        // 表示场上有几个球员
        private static int size = 0;
    
        public MyArrayList(){
            this(10);
        }
    
        // 1):设置初始量(可以存储多少个球员.)
        public MyArrayList(int capacity) {
            if (capacity < 0) {
                throw new RuntimeException("初始量不能小于0");
            }
            elements = new Object[capacity];
        }
    
        // 2):安排五个球员上场(11,22,33,44,55).
        public void add(Object ele) {
            //判断当前size和capacity大小关系
            if (size >= elements.length) {
                // 扩容:原始初始容量*2
                int newCapacity = elements.length * 2;
                //Integer[] newElements = new Integer[newCapacity];
                //把原始数组中的数据拷贝到新数组中,返回的是新数组
                Object[] newElements = Arrays.copyOf(elements, newCapacity);
                elements = newElements;
            }
            //===========================
            elements[size] = ele;
            size++;
        }
    
        // 4):查询指定位置是哪一个球员(比如,位置为2的球员是33.).
        public Object get(int index) {
            if (index < 0 || index >= size) {
                throw new RuntimeException("索引越界!!!");
            }
            return elements[index];
        }
    
        // 5):从上场球员中,移除指定球衣号的一个球员.
        public void remove(Integer index) {
            // 找到当前被移除球员所在的位置
            if (index < 0 || index >= size) {
                throw new RuntimeException("索引越界!!!");
            }
            // 把index之后的元素,整体向前移动一位
            for (int i = index; i < size - 1; i++) {
                elements[i] = elements[i + 1];
            }
            elements[size - 1] = null;
            size--;
        }
    
        // 6):把指定位置的球员换成另一个球员.
        public void set(int index, Object ele) {
            if (index < 0 || index >= size) {
                throw new RuntimeException("索引越界!!!");
            }
            elements[index] = ele;
        }
    
        // 7):打印出场上的球衣号码(比如:[11,22,33,44,55]).
        @Override
        public String toString() {
            StringBuilder sb = new StringBuilder();
            sb.append("[");
            for (int i = 0; i < size; i++) {
                sb.append(elements[i]);
                if (i != size - 1) {
                    sb.append(",");
                }
            }
            sb.append("]");
            return sb.toString();
        }
        //返回存储了几个元素
        public int size() {
            return size;
        }
        //判断该对象是否存储了元素
        public boolean isEmpty() {
            return size == 0;
        }
        //清空所有的元素
        public void clear() {
            for (int i = 0; i < size; i++) {
                elements[i] = null;
            }
            size=0;
        }
    }

    Stack

    //
    public class MyStack extends MyArrayList {
        // 规定:数组的最后一个位置就是栈顶
    
        // 进栈:把新添加的数据压入到栈顶
        public void push(Object ele){
            super.add(ele);
        }
        // 出栈:移除栈顶元素
        public void pop(){
            remove(this.size()-1);
        }
    
        // 获取栈顶的元素
        public Object peek() {
            return get(this.size()-1);
        }
    }
  • 相关阅读:
    Cannot load php5apache2_4.dll into server
    goroutine,channel
    为什么 Go 标准库中有些函数只有签名,没有函数体?
    PHP编码风格规范
    etcd压测造成数据目录过大恢复
    高可用kubernetes集群查看kube-scheduler和kube-controller-manager哪个是leader节点
    kubeadm join添加节点,新加节点夯在not ready(cni config uninitialized)
    一次.dockerignore设置错误导致的docker build排查
    通过开源插件实现sonarqube区分不同分支显示代码扫描结果
    python脚本,调用接口清理镜像多余tag
  • 原文地址:https://www.cnblogs.com/zengqinghong/p/11831279.html
Copyright © 2011-2022 走看看