数据结构与算法(C语言)第2版第一章绪论知识总结和分享

数据结构与算法作为计算机科类必学的基础课程,无论是对我们以后编写代码抑或是解决数学理论知识都有一定的奠基作用,无论是数据结构还是算法,它教会我们的是解决问题的思想,但是前提是至少你得学会一门编程语言(C/C++)。换句话说,在掌握任何一门编程语言的基础上,都可以学习数据结构和算法。因此我这里总结每一章需要用到的的知识点,便于后期学习与回顾。
下面我来总结第一章绪论学到的知识点
首先得明确:
程序设计

绪论目录

  • 一:数据结构研究内容
  • 二:基本概念和术语
    • 2.1 数据,数据元素,数据项,数据对象
    • 2.2 数据结构
      • 2.2.1 逻辑结构
        • 定义:
        • 四种基本逻辑结构关系图:
        • 按照层次划分:
      • 2.2.2 存储结构
        • 定义:
        • 顺序结构:
        • 链式存储结构:
  • 三:数据类型:
    • 3.1 数据类型:
    • 3.2 抽象数据类型:
  • 四:算法与算法分析:
    • 4.1 定义和特性:
    • 4.2 优劣标准:
    • 4.3 时间复杂度:
    • 4.4 空间复杂度:

一:数据结构研究内容

数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的科学。

二:基本概念和术语

2.1 数据,数据元素,数据项,数据对象

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
数据元素:是组成数据的基本单位,在计算机中通常作为整体处理,也被称为记录。比如在人类中,人就是数据元素,比如树中棋盘的一个格局。
数据项:是组成数据元素的,有独立含义的,不可分割的最小单位。
数据对象:是性质相同的数据元素的集合,是数据的子集。

2.2 数据结构

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

2.2.1 逻辑结构

定义:

从逻辑关系中描述数据,与数据存储无关,独立于计算机的

四种基本逻辑结构关系图:

数据结构与算法(C语言)第2版第一章绪论知识总结和分享_第1张图片
集合结构:属于同一集合
线性结构:一对一关系
树结构:一对多关系
图结构:多对多关系

按照层次划分:

数据结构与算法(C语言)第2版第一章绪论知识总结和分享_第2张图片

2.2.2 存储结构

定义:

数据对象在计算机中的存储表示为数据的存储结构,也叫物理结构。

顺序结构:

借助元素在存储器的相对位置来表示数据元素之间的逻辑关系,类似于数组形式,要求所有元素放在一片连续的存储空间内。

链式存储结构:

无需采用一整块存储空间,需要给每一个节点附加指针字段,用于存放后续元素的存储地址 类似于用指针类型来描述。

三:数据类型:

3.1 数据类型:

数据类型是一个值的集合和定义在这个值集合上的一组操作的总称

3.2 抽象数据类型:

抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。

ADT ADT-Name{
    Data://数据说明
    数据元素之间逻辑关系的描述
    Operations://操作说明
    Operation1://操作1,它通常可用C或C﹢﹢的函数原型来描述
    Input:对输入数据的说明
    Preconditions:执行本操作前系统应满足的状态//可看作初始条件
    Process:对数据执行的操作
    Output:对返回数据的说明
    Postconditions:执行本操作后系统的状态//"系统"可看作某个数据结构


    Operation2://操作2
    ……
  }//ADT 

四:算法与算法分析:

4.1 定义和特性:

输入、输出
算法具有零个或多个输入,至少有一个或多个输出

有穷性
算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间完成(比如一个算法几十年后一定会结束,但是那时候得出的结果意义就不大了)

确定性
算法的每一个步骤都具有一个确定的含义,不会出现二义性(歧义)

可行性
算法的每一步都能通过执行有限次数完成

4.2 优劣标准:

正确性
合理的数据输入下,能够在有效时间内得到正确的答案

可读性
算法设计的另一目的是为了便于自己和他人的阅读、理解和交流

健壮性
当输入数据不合法的时候,算法也能做出相关处理,而不是产生异常

高效性
算法应该尽量满足时间效率高和存储量低的需求

4.3 时间复杂度:

语句频度:一条语句的重复执行次数
大O记法:用O()来体现时间复杂度的记法
在计算时间复杂度时,可以忽略所有低次幂项和最高次幂的系数来简化算法分析
常见复杂度计算
常量阶:
T(n)=O(1)
线性阶:
T(n)=O(n)
平方阶:
T(n)=O(nn)
立方阶:
T(n)=O(n
n*n)
对数阶:
T(n)=O(log2n)

4.4 空间复杂度:

S(n)=O(f(n))
利用空间来换取时间
例如:判断某某年是不是闰年,第一种方法是利用算法计算,第二种方法是建立一个有2050个元素的数组,然后把所有的年份按下标的数字对应,如果是闰年,那么数组的这一项就是1,如果不是闰年,这一项就是0,然后闰年的判断就变成了查找这一年对应数组中的数字是什么。第一种方法消耗的时间大一点,第二个方法消耗的空间大一点。即用空间换取时间
最后,除非明确说明是空间复杂度,一般情况下复杂度都是指时间复杂度

作者:刘港辉
本文源自:《https://editor.csdn.net/md?articleId=120172236》
本文版权归作者所有,欢迎转载。
如果有不足,欢迎雅正留言

你可能感兴趣的:(数据结构,算法,c语言)