zoukankan      html  css  js  c++  java
  • 1.数组

    点击使用幕布网页版查看(含思维导图)

    数组(Array)是一种线性表结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

    • 最大的特点:支持随机访问,根据下标随机访问的时间复杂度为O(1)

    • 寻址:a[i]_add = base_add + i * data_type_size

    • 数组的插入和删除比较低效

      • 插入:如果我们要将数据插入到数组的第K个位置,为了把第K个位置空出来,我们需要将第K~N这部分的数据全部往后挪一位,这个操作的时间复杂度是O(n)
      • 删除:如果要删除第K个位置的数据,为了内存的连续性,也要将第K~N位置的数据往前挪一位,时间复杂度也是O(n)

    当然,我们可以进行优化,那就是删除数据时并不立即删除,而是记录下已删除的数据。等到数组没有更多空间了,再执行一次真正的删除操作,一次性清理掉所有已删除数据。

    数组Java实现

    
    public class myArray {
        private int data[];//数据
        private int size;//数组大小
        private int count;//数组当前大小
    
        /**
         *
         * @param size
         */
        public myArray(int size){
            this.data = new int[size];
            this.size = size;
            this.count = 0;
        }
    
        /**
         * 删除指定index位置值
         * @param index
         * @return
         */
        public boolean delet(int index){
            //index不合法
            if(index < 0 || index > count) {
                System.out.println("位置不合法!");
                return false;
            }
    
            //[index+1,count)往前移动一位
            for(int i = index +1 ; i < count; i++){
                data[i-1] = data[i];
            }
            count--;
            return true;
        }
    
        /**
         * 将值插入所给下标处
         * @param index
         * @param value
         * @return
         */
        public boolean insert(int index, int value){
            //index不合法
            if(index < 0 || index > count) {
                System.out.println("位置不合法!");
                return false;
            }
    
            //内存空间已满
            if(size == count) {
                System.out.println("内存空间已满!");
                return false;
            }
    
            //[index,count)后移一位
            for(int i = count; i > index; i--)
                data[i] = data[i-1];
    
            data[index] = value;
            count ++;
    
            return true;
        }
    
        /**
         * 将值插入数组最后面
         * @param value
         * @return
         */
        public boolean append(int value){
            //内存空间已满
            if(size == count) {
                System.out.println("内存空间已满!");
                return false;
            }
    
            data[count++] = value;
    
            return true;
        }
    
        /**
         * 返回数组字符串
         * @return
         */
        public String toString(){
            StringBuilder builder = new StringBuilder();
            for(int i = 0; i < count; i++)
                builder.append(data[i] + ",");
            return builder.toString();
        }
    
        public void arrTest(){
            myArray test = new myArray(10);
            test.append(1);
            System.out.println(test.toString());
            test.insert(1,4);
            System.out.println(test.toString());
            test.delet(0);
            System.out.println(test.toString());
        }
    }
    
  • 相关阅读:
    ubuntu
    什么是守护进程?
    Redis 简介
    什么是原子性,什么是原子性操作?
    什么是BSD协议?
    查看内存
    数据库备份与还原
    PostgreSQL 判断字符串包含的几种方法
    SQL 基础
    手风琴-过渡效果,显示隐藏列表案例
  • 原文地址:https://www.cnblogs.com/codespoon/p/13231034.html
Copyright © 2011-2022 走看看