zoukankan      html  css  js  c++  java
  • 绪论

    性质:专业基础课,计算机专业核心课程;72学时,4.5学分;课程设计1周,1学分。
    特点:结构复杂,算法抽象;
    重点:线性表、二叉树、图、查找、排序;
    难点:链式存储结构,递归算法。
    一个人迟早、肯定能够从他的付出中获得回报,也肯定会因为偷懒、幼稚、无知而付出代价,有些惨痛级别的代价是不能承受的。例如,大学不能毕业、没有学位、留级等,影响终身,后悔莫及。
    1.1.1   为什么要学习数据结构
    软件设计是计算机学科各个领域的核心。软件设计时要考虑的首要问题是数据的表示、组织和处理方法。数据结构设计和算法设计是软件系统设计的核心。
    “数据结构+算法=程序设计” 
    数据结构(data structure)指数据元素之间存在的关系。包含以下三方面:
    数据的逻辑结构
    数据的存储结构
    数据操作
    线性结构:数据元素只有一个前驱数据元素和一个后继数据元素。
    树结构:每个数据元素只有一个前驱数据元素,可有零个或若干个后继数据元素。
    图结构:每个数据数据元素元素可有零个或若干个前驱数据元素,零个或若干个后继。
    线性表表示可重复的无序集合,元素间具有前驱、后继次序关系;不同元素的关键字可重复,采用序号能够识别关键字重复的数据元素。
    排序线性表表示可重复的排序集合,元素按关键字大小次序排序。
    散列表表示不可重复的无序集合,元素关键字不重复,元素间没有次序,不排序。
    二叉排序树表示不可重复的排序集合,元素关键字不重复,元素按关键字升/降序排序。
    一个算法(Algorithm)是一个有穷规则的集合,其规则确定一个解决某一特定类型问题的操作序列。 
    算法定义
    有穷性
    确定性
    输入
    输出
    可行性
    算法设计目标
    正确性
    可读性
    健壮性
    高时间效率
    高空间效率

    算法分析

    度量算法的时间效率
    算法的时间效率指算法的执行时间随问题规模的增长而增长的趋势,通常采用时间复杂度来度量算法的时间效率。
    T(n)=O(f(n)) 
    度量算法的空间效率
    空间复杂度指算法在执行时为解决问题所需要的额外内存空间,不包括输入数据所占用的存储空间。 
    S(n)=O(f(n))  

    返回a与b的最大公约数
    int gcd(int a, int b) 
    {
        while (b!=0)
        {   int temp = a%b;
            a = b;
            b = temp; 
        }
        return a;
    }
    //《数据结构(Java版)(第4版)》,作者:叶核亚。2014年7月3日。JDK 8.11。
    //§1.2.3   算法设计
    //【例1.3】 求两个整数的最大公约数。
    //4.3 递归【实验4-5】递归算法
    
    public class Gcd
    {
        public static int gcd1(int a, int b)          //返回a与b的最大公因数
        {
            while (b!=0)
            {
                int temp = a%b;
                a = b;
                b = temp; 
            }
            return a;
        }
        
        //4.3 递归【实验4-5】递归算法
        public static int gcd2(int a, int b)          //返回a,b的最大公因数,递归方法
        {
            if(b==0)
                return a;
            if(a<0)
                return gcd2(-a, b);
            if(b<0)
                return gcd2(a, -b);
            return gcd2(b, a%b);
        }
        public static int mygcd2(int a, int b){
            if(b ==0) return a;
            return mygcd2(b,a%b);
        }
        public static Integer mygcdn(int... numArray){
            if(numArray.length == 0){
                return null;
            }
            if(numArray.length == 1){
                return numArray[0];
            }
            return myGcdnForManyNumber(numArray);
        }
        // 我自己补充的求多个数的最大公约数
        public static Integer myGcdnForManyNumber(int... numArray){
            if(numArray.length == 2){
                return mygcd2(numArray[0],numArray[1]);
            }
            int[] newArray = new int[numArray.length -1];
            newArray[0] = mygcd2(numArray[0],numArray[1]);
            System.arraycopy(numArray, 2, newArray, 1, numArray.length -2);
            return myGcdnForManyNumber(newArray);
        }
        
        public static void main(String args[]) 
        {
            System.out.println(12%18);
            int a=12, b=18, c=24;
            System.out.println("gcd1("+a+","+b+","+c+")="+gcd1(gcd2(a,b), c));
            System.out.println("gcd1("+a+","+b+","+c+"+3)="+mygcdn(a,b,c,3));
        }
    }
    /*
    程序运行结果如下:

    12

    gcd1(12,18,24)=6

    gcd1(12,18,24+3)=3

     
  • 相关阅读:
    (17)打鸡儿教你Vue.js
    (16)打鸡儿教你Vue.js
    (15)打鸡儿教你Vue.js
    (14)打鸡儿教你Vue.js
    (13)打鸡儿教你Vue.js
    Webpack 入门教程
    ios textfield如何设置,只能输入1.0-9.9内的数字,并实现时时监测效果
    安卓edittext实现输入数字限制条件的效果
    js动态设置根元素的rem方案
    Fresco使用之OOM问题记录
  • 原文地址:https://www.cnblogs.com/lakeslove/p/12990525.html
Copyright © 2011-2022 走看看