• 数据结构和算法——绪论


    一、绪论

    1.1 数据结构的研究内容

            1、数据的各种逻辑结构和物理结构(存储结构),以及它们之间的相应关系

            2、对每种结构定义相适应的各种运算

            3、设计出相应的算法

            4、分析算法的效率

    1.2 基本概念和术语

    1.2.1 数据、数据结构、数据项和数据对象

     举个例子说明:假设有两张表,上表为人员表,下表为课程表,表的格式如下:

    姓名性别身高课程代号
    小明180A
    小红180       A
    小绿180                B
    课程代号课程名
    A语文
    B数学

    这两张表就是数据

    而单独的一张表就是数据对象, 即人员表和课程表都是一个数据对象,而每张表的每一行就是数据元素。而姓名、身高、课程代号、性别就是数据项,是最小的不可分割的最小单位。

    1.2.2 数据结构

    数据结构包括逻辑结构和物理结构(存储结构)两个层次。

    数据结构是相互之间存在一种或者多种特定关系的数据元素的集合。

    a、逻辑结构

    逻辑结构是分为四种类型:集合结构、线性结构、树形结构、图结构

    集合结构:数据元素同属一个集合,单个数据元素之间没有任何关系。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4zzJGWwu-1604820044558)(images/20201107113322490.png)]

     线性结构:类似于线性关系,线性结构中的数据元素之间是一对一的关系。

    [转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xcX4kHLt-1604820044561)(images/20201107113349349.png)]

     树形结构:树形结构中数据元素之间存在一对多的关系。(各元素及元素关系所组成图形类似于树状图)。

    [存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i1iwm9J6-1604820044565)(images/2020110711340070.png)]

     图形结构:数据元素之间是多对多的关系。如下图所示。

    [(img-WetcYd94-1604820044567)(images/20201107113413856.png)]

     总结:逻辑结构是独立于计算机的,总体可以划分为线性结构和非线性结构,其中线性结构是指每个元素都有且仅有一个前驱和后继,而非线性结构是一个结点可能有多个直接前驱和多个直接后继。

    b 存储结构(物理结构)

    物理结构又叫存储结构,分为四种:顺序存储结构、链式存储结构、索引存储结构、散列存储结构,主要关注于前面两种存储结构。

    (1)顺序存储结构

    顺序存储结构就是把数据元素放到地址连续的存储单元里面,其数据间的逻辑关系和物理关系是一致的。之前学习的数组就是一种顺序存储结构,(如下图所示)

    [转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Md4Jd1I6-1604820044569)(images/20201107113434453.png)]

    (2)链式存储结构

    链式存储结构:是把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的也可以是不连续的。根据指针找出相邻元素的位置。

     在这里插入图片描述

     1.2.3 数据类型和抽象数据类型

    a、数据类型

    一般包括整型,实型、字符型等基本类型外、还有数组、结构体和指针等构造数据类型。

    b、抽象数据类型(Abstract Data Type,ADT)

    类似于C语言中的结构体和C++、Java中的类。

    通俗的讲,抽象数据类型,泛指除基本数据类型以外的数据类型。

    1.3 抽象数据类型的表示与实现

    抽象数据类型的概念与面向对象的思想是一致的。

    1.4 算法和算法分析

    程序 = 数据结构 + 算法

    1.4.1 算法的定义及特性、

    算法是为了解决某类问题而规定的一个有限长的操作序列。

    一个算法必须满足以下5个重要特性:有穷性、确定性、可行性、输入、输出、

    1.4.2 评价算法优劣的基本标准

    正确性、可读性、健壮性(鲁棒性)、高效性

    1.4.3 算法的时间复杂度

    详细可看这个:(5条消息) 一套图 搞懂“时间复杂度”_12 26 25的博客-CSDN博客_时间复杂度

    看以下代码的时间复杂度:

    \转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ozjmldFC-1604820044571)(images/20201107113605227.png)]

     最好、最坏和平均时间复杂度

    1.最好时间复杂度:指的是算法计算量可能达到的最小值

    2.最坏时间复杂度:指的是算法计算量可能达到的最大值。

    3.平均时间复杂度:是指算法在所有可能情况下,按照输入实例以等概率出现时,算法计算量的加权平均值

    1.4.4 算法的空间复杂度

    空间复杂度只需要分析辅助变量所占的额外空间。一个算法的空间包括算法本身占用的空间以及辅助空间。

    空间复杂度:S(n)= O(f(n))

    如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为O(1)

    举个例子

    1. int i = 1;
    2. int j = 1;
    3. ++i;
    4. ++j;
    5. int m = i+j;

    代码中的i,j,m所分配的空间不能随着处理数据量的变化,因此它的空间复杂度S(n) = O(1)

    我们再看一个代码:

    1. int []m = new int[n];
    2. for (i = 1; i <= n; ++i) {
    3. j = i;
    4. j++;
    5. }

    这段代码中,第一行new了一个数组出来,这个数据占用的大小为n,这段代码的2-5行,虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可,即 S(n) = O(n)

    第一章 总结

    [片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sj3ANZIY-1604820044572)(images/20201107123513793.jpg)]

    数据、数据对象和数据元素、数据项的关系如下

    [转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JbbYJOEX-1604820044573)(images/20201107113623372.png)] 

    数据结构是相互之间存在一种或者多种特定关系的数据元素的集合,同样是结构,从不同角度来讨论,会有不同的分类,如下图所示

    [失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2q352GF-1604820044574)(images/20201107113637948.png)] 

    算法是为了解决某类问题而规定的一个有限长的操作序列。

    算法具有五个特性:有穷性、确定性、可行性、输入和输出

    算法分析的重点方面是分析算法的时间复杂度和空间复杂度。

  • 相关阅读:
    【Spring Boot】分页查询
    Stable Diffusion是什么
    linux rsyslog介绍
    性能测试监控指标及分析调优
    第一次笔记:计算机硬件的工作原理 主存储器 运算器 控制器 计算机的工作过程 计算机系统的层次结构 三种级别的语言
    数据结构线性表之带头双向循环链表
    kube-prometheus 监控系统使用与总结
    汽车软件 OTA技术解析
    MySQL主从复制-读写分离
    Java 9 的模块(Module)系统
  • 原文地址:https://blog.csdn.net/qq_43460068/article/details/126600106