• 数据结构与算法(一)


    数据结构与算法(一)

    1.1数据结构概述

    什么是数据结构?

    数据的存储结构

    • 顺序存储结构,类似排队打饭

    • 链式存储结构,类似取号打饭

    • 两种方式的区别:顺序存储影响插入后的所有元素,而链式存储影响范围更小

    • 数据的逻辑结构

      • 集合,维恩图
      • 线性,列表
      • 树形,一对多
      • 图形,多对多的关系

    1.2算法概述

    即解决问题的思路

    特性

    1. 输入
    2. 输出
    3. 有穷性
    4. 确定性
    5. 可行性

    要求

    • 正确性
    • 可读性
    • 健壮性
    • 时间复杂度
    • 空间复杂度

    从1加到100

    mark

    package demo1;
    
    public class AddOneToHandred {
    
    	public static void main(String[] args) {
    		int total=0;
    		int end=100;
    		//使用for循环计算
    		for(int i=1;i<=end;i++) {
    			total+=i;
    		}
    		
    		//直接计算
    		total=(1+end)*end/2;
    		//算法没有最好的,只有最适合的。
    		
    		//打印结果
    		System.out.println(total);
    	}
    	
    }
    

    2.1数组的基本使用

    mark

    package my;
    
    public class UseArray {
    
    
        public static void main(String[] args) {
            //创建一个数组
            int[] array = new int[3];
    
    
            //获取数组长度
            System.out.println(array.length);
            System.out.println("---------------------------------------------------------------------");
    
            //访问数组中的元素:数组名[下标]
            System.out.println(array[0]);
            System.out.println("---------------------------------------------------------------------");
    
            //为数组的元素赋值
            array[0]=1;
            array[1]=14;
            array[2]=51;
            //遍历数组
            for (int i =0 ; i < array.length; i++) {
                System.out.println(array[i]);
            }
            System.out.println("---------------------------------------------------------------------");
            //创建数组的同时为数组中的元素赋值
            int[] int2 = {1, 3, 556, 77, 76, 45, 5, 6};
            for (int i =0 ; i < int2.length; i++) {
                System.out.println(int2[i]);
            }
        }
    }
    
    

    2.2数组元素的添加

    mark

    package my;
    
    import java.util.Arrays;
    //为数组添加元素
    
    public class InsertOpArray {
        public static void main(String[] args) {
            //解决数组的长度不可变
            int[] array = {1, 4, 7, 8};
            System.out.println("原数组为"+Arrays.toString(array));
            //往数组中插入一个数
            int num=99;
            //创建一个新的数组,长度为原来的数组的长度加一
            int[] newArray = new int[array.length + 1];
            //把原来的数组的元素全部的赋值到新数组中
            for (int i = 0; i <array.length; i++) {
                newArray[i]=array[i];
            }
            //将需要添加的元素加入新数组的最后
            newArray[array.length]=num;
            //原数组引用新数组
            array=newArray;
            System.out.println("新数组为"+Arrays.toString(array));
    
    
        }
    }
    
    

    2.3数组元素的删除

    mark

    package my;
    
    import java.util.Arrays;
    
    public class DeleteArray {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
            //int[] arr = {1, 2, 3, 4, 6, 7, 8, 9, 10};
    
            System.out.println("原数组为"+Arrays.toString(arr));
            //删除数组中的某一个元素:该元素前面的数不变,其余的数下标左移一位
            //首先创建一个长度-1的新数组
            int[] newArr = new int[arr.length - 1];
            //要删除的元素下标,这里删除第五个元素
            int index=4;
            for (int i = 0; i < index; i++) {
                newArr[i]=arr[i];
            }
            for (int i = index; i < newArr.length; i++) {
                newArr[i]=arr[i+1];
            }
            arr=newArr;
            System.out.println("新数组为"+Arrays.toString(arr));
    
    
    
    
        }
    }
    
    

    2.4面向对象的数组

    mark

    package my;
    
    import java.util.Arrays;
    
    public class ObjectArray {
        private int[] elements;
    
    
        public ObjectArray() {
            this.elements = new int[0];
        }
    
        //获取数组长度的方法
        public int getSize(){
            return elements.length;
        }
    
        //往数组的末尾添加一个元素,参数为需要添加的数
        public void add(int element){
            //创建一个数组长度加一的新数组
            int[] newArr = new int[elements.length + 1];
    
            //赋值,并将最后的元素追加进数组里面
            for (int i=0;i<elements.length;i++){
                newArr[i]=elements[i];
            }
            newArr[elements.length]=element;
            //数组引用
            elements=newArr;
        }
    
        //在数组中删除某一个下标的元素
        public void delete(int index){
            //创建一个数组长度减一的新数组
            int[] newArr = new int[elements.length - 1];
            //根据下标判断,进行区别赋值
            for(int i=0;i<newArr.length;i++){
                if(i<index){
                    newArr[i]=elements[i];
                }else{
                    newArr[i]=elements[i+1];
                }
            }
            elements=newArr;
    
            //数组引用
        }
    
        //根据下标插入元素到数组里面
        public void insert(int index,int element){
            //创建一个新的数组,长度为原来的长度加一
            int[] newArr = new int[elements.length + 1];
            for(int i=0;i<elements.length;i++){//曾出错:条件写错成i<newArr.length导致数组越界
                if(i<index){
                    newArr[i]=elements[i];
                }
                else{
                    newArr[i+1]=elements[i];//这里出错:数组越界,错在上面
                }
            }
            newArr[index]=element;
            elements=newArr;
        }
    
    //    替换指定位置上的元素
        public void set(int index,int element){
            elements[index] = element;
        }
    
    
        //打印数组元素到控制台
        public void show(){
            System.out.println("数组为"+Arrays.toString(elements));
        }
    
        public void line(){
            System.out.println("==========================================================================");
        }
    }
    
    
    package my;
    
    import java.util.Arrays;
    
    public class TestObjectArray {
        public static void main(String[] args) {
            //创建一个可变数组
            ObjectArray array = new ObjectArray();
            //获取长度
            int size = array.getSize();
            System.out.println("数组的长度为"+size);
            array.show();
            array.line();
            //往可变数组中添加一个元素
            array.add(99);
            System.out.println("添加一个元素后的数组长度为"+array.getSize());
            array.show();
            array.line();
            //添加元素
            array.add(1);
            array.add(21);
            array.add(31);
            array.add(51);
            array.add(61);
            array.add(71);
            array.show();
            array.line();
            System.out.println("删除下标为3的元素后");
            array.delete(3);
            array.show();
            array.line();
            //插入下标为3的值
            array.insert(3,100);
            array.show();
            array.line();
            //替换下标为2的元素
            array.set(2,998);
            array.show();
    
    
        }
    }
    
    
  • 相关阅读:
    http delete 服务端拿不到body
    VUE 指定、获取DOM元素的自定义值
    delphi + redis 实现即时消息
    VUE 父组件、子组件图片链接
    【杂记】Linux 学习笔记
    【杂记】Oracle
    iOS 容易造成循环引用的三种场景
    NSNotificationCenter KVO KVC Delegate Block
    C语言和OC的区别? 面向对象和面向过程的区别?
    SDWebImage的实现原理
  • 原文地址:https://www.cnblogs.com/senup/p/12305920.html
Copyright © 2020-2023  润新知